2012-05-09 24 views
8

Wenn nicht selbstregistrierend. Wie können wir die Registrierung der COM-DLL während der Installation mit WIX durchführen?registrierung com dll in wix

Wie in der tutorial, ich verwendete ComPlusApplication Beispiel (nicht. NET Dll). Aber es funktioniert nicht. Es kann nicht registriert werden.

Ich kann Regsvr32 von der Befehlszeile erfolgreich registrieren. Ich habe gelesen, dass ich keine benutzerdefinierten Aktionen zum Registrieren von Com-Dlls erstellt habe.

SO was ist der beste Ansatz? Wenn wir Wärme verwenden müssen, wo schreiben wir die Befehle und fügen das Ergebnis wxs dem Hauptprojekt hinzu?

+0

Obwohl Sie nach einer Möglichkeit zur Registrierung gefragt haben, könnten Sie erwägen, die COM-Komponenten nicht zu registrieren. Die Registrierung freie COM-Modelle können Sie COM-DLLs verwenden, ohne die Registrierung überhaupt zu berühren. Siehe: http://msdn.microsoft.com/en-us/library/ms973913.aspx – harper

Antwort

17

Ich würde empfehlen, den Wix-Tool Heat.exe unter Verwendung aller Daten zu ernten notwendig, um die COM-Komponente registrieren und verweist dann das Fragment in Ihrem .wxs wie diese Datei:

<ComponentGroupRef Id="FooBar.dll" /> 

Oder ist es in Ihre .wxs Datei wie folgt aus:

<?include FooBar.dll.wxi?> 

dieser Methode können Sie die volle Kontrolle über das gibt, was bei der Anmeldung/Abmeldung der COM-Komponente geschieht.

Sie können Regsvr32 jedoch immer noch in einem Wix-Projekt verwenden. Aber es stützt sich auf die korrekte Umsetzung der Registerserver/UnregisterServer Funktionen in der COM-Komponente

<CustomAction Id="RegisterFooBar" 
        Directory="INSTALLDIR" 
        ExeCommand='regsvr32.exe /s "[INSTALLDIR]FooBar.dll"'> 
    </CustomAction> 
    <CustomAction Id="UnregisterFooBar" 
        Directory="INSTALLDIR" 
        ExeCommand='regsvr32.exe /s /u "[INSTALLDIR]FooBar.dll"'> 
    </CustomAction> 

dann Ihre Aktion zur Sequenz installieren hinzuzufügen.

<InstallExecuteSequence> 
     <Custom Action="RegisterFooBar" After="InstallFinalize">NOT Installed</Custom> 
     <Custom Action="UnregisterFooBar" After="InstallFinalize">REMOVE="ALL"</Custom> 
    </InstallExecuteSequence> 
+0

Ich habe Heat-Tool verwendet, um zu generieren und kopierte dann die Ausgabe in meine .wxs-Datei. – rakheep

+0

@rakheep: Wenn Sie eine Antwort nützlich finden, bitte upvote. Wenn Sie eine oder mehrere richtige Antworten erhalten haben, wählen Sie bitte die beste als Antwort aus. – JOG

+0

Sieht aus, als ob der Befehl zum Aufheben der Registrierung in Ihrem Beitrag oben fehlt. Auch ich musste diese Methode verwenden, als ich die Registrierungsinformation nicht extrahieren konnte, die Hitze für eine bestimmte DLL verwendet. Arbeitete für alle außer 1 in einem bestimmten Projekt. –

2

Sie könnten versuchen, das heat.exe-Programm zu verwenden und dann das Fragment in Ihrem Wix-Code zu referenzieren.

heat.exe Datei -GG -out

Wie in:

heat.exe Datei my.dll -GG -out my.wxs

Ps. Durch das Hinzufügen von -gg werden die Guides erzeugt, andernfalls können Sie sie überspringen, wenn Sie sie manuell hinzufügen möchten.