Frage

Ich habe ein Setup-Projekt für eine .NET-Service-Anwendung, die eine .NET-Komponente Weicht verwendet eine COM-Schnittstelle macht (COM Callable Wrapper / CCW). Um die Komponente arbeitet an einer Zielmaschine zu bekommen, hat es mit registriert werden

  

regasm.exe / TLB / Code-Basis Component.dll

Der / TLB schaltet das typelib ist obligatorisch in diesem Fall zu erzeugen, sonst kann ich nicht aus dieser Assembly Objekte erstellen.

Die Frage ist, wie kann ich mein Visual Studio 2008 Setup-Projekt konfigurieren, dass diese Baugruppe mit einem Aufruf registrieren / TLB regasm?

War es hilfreich?

Lösung

Sie können den manuellen Aufruf verlieren, indem Sie System.Runtime.InteropServices.RegistrationServices RegAsm.exe statt:

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);

RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.RegisterAssembly(GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase))
{
    throw new InstallException("Failed to register for COM Interop.");
}

}

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);

RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.UnregisterAssembly(GetType().Assembly))
{
    throw new InstallException("Failed to unregister for COM Interop.");
}
}

Dies hebt die Registrierung auch die Bibliothek auf deinstallieren.

Andere Tipps

  1. In Ihrem Hauptprojekt (die man die Klasse enthält, die Sie registrieren möchten), rechts die Projektdatei klicken und wählen Sie Hinzufügen / Neuer Eintrag und wählen Sie Installer Klasse. Nennen Sie es so etwas wie clsRegisterDll.cs
  2. Im Designer, erscheint ‚Klicken Sie hier, um Code-Ansicht zu wechseln‘, klicken Sie auf oder rechts klicken Sie auf die clsRegisterDll.cs Datei in Projektmappen-Explorer, und wählen Sie Code anzeigen
  3. Ignoriere das Installieren, Commit und Deinstallieren Methoden hinzufügen:

    // Holen Sie sich die Position regasm String regasmPath = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory () + @ "regasm.exe"; // Holen Sie sich die Position unseres DLL String componentPath = typeof (RegisterAssembly) .Assembly.Location; // Execute regasm
    System.Diagnostics.Process.Start (regasmPath "/ codebase / TLB \" "+ componentPath + "\"");

    Swap / codebase / TLB für / u in der Deinstallation Aktion.

  4. Stellen Sie sich Ihr Projekt
  5. In Ihrem Installateur, stellen Sie sicher, dass Sie Ihre DLL in den Anwendungsordner hinzugefügt haben, und dann mit der rechten Maustaste auf das Installer-Projekt und wählen Sie Ansicht / Benutzerdefinierte Aktionen
  6. Rechtsklicken Sie auf Installieren, und klicken Sie dann auf Benutzerdefinierte Aktion hinzufügen
  7. Klicken Sie doppelt auf Anwendungsordner, und dann auf dem DLL
  8. Machen Sie dasselbe für die Commit Aktion
  9. Erstellen und testen Sie Ihr Installateur

Eine Komplettlösung mit einer tatsächlichen Klasse für Sie versuchen, finden Sie unter: http: // leon.mvps.org/DotNet/RegasmInstaller.html

Ihr Dienst sollte eine Installer Klasse. Registrieren Sie an der OnAfterInstall Ereignis und rufen RegAsm. Der Pfad sollte aus dem Windows-Verzeichnis und gebunden an eine bestimmte .NET-Version berechnet werden

Ich versuchte zunächst regasm aus dem Installationsprozess ausgeführt (bevor ich diesen Beitrag gesehen haben). Der Versuch, regasm zu laufen, und der Handhabung alle Fehler problematisch war -. Auch ohne zu versuchen, erweiterten Rechten für Windows 7

zu handhaben

Mit Runtime.InteropServices.RegistrationServices.RegisterAssembly war viel sauberer und lieferte eine viel bessere Fehlerbehandlung.

Visual Studio Installer macht nur COM-Klasse-Registrierung, aber nicht die Art Bibliothek Erzeugung und Registrierung machen (das ist, was bei /tlb wechseln regasm.exe does) standardmäßig aktiviert. Zumindest in Visual Studio 2017 ist es genug, um die Typenbibliothek in den Post-Build-Schritten von DLL zu generieren Tlbexp.exe Dienstprogramm registriert werden.

Wenn das Installationsprojekt eine Datei mit der Erweiterung .tlb im gleichen Verzeichnis und mit dem gleichen Namen wie die Bibliothek entdeckt Sie installieren, enthält es automatisch auf das Setup-Projekt und macht die Registrierungsschritte während der Installation. Natürlich ist es auch möglich, die .tlb Datei von Hand zu erzeugen und in dem Setup-Projekt gehört (und seine Register Eigenschaft auf vsdrfCOM).

Hier ist ein großer Artikel über C # und COM-Schnittstelle und die Informationen über kommen aus seinem Abschnitt namens Deployment.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top