2012-05-09 23 views
8

Se non si registra automaticamente. allora come eseguiamo la registrazione della DLL COM durante l'installazione usando WIX?registrazione com dll in wix

Come per lo tutorial, ho utilizzato l'esempio di ComPlusApplication (non .net dll). Ma non funziona. Non riesce a registrarsi.

Posso registrarmi utilizzando regsvr32 dalla riga di comando con successo. Ho letto di non creare azioni personalizzate per la registrazione di comandi.

Quindi qual è l'approccio migliore? Se abbiamo bisogno di usare il calore, dove scriviamo i comandi e aggiungiamo i risultati wx al progetto principale?

+0

Sebbene sia stato richiesto un metodo di registrazione, è possibile non registrare i componenti COM. I modelli COM senza registrazione consentono di utilizzare DLL COM senza toccare il Registro di sistema. Vedere: http://msdn.microsoft.com/en-us/library/ms973913.aspx – harper

risposta

17

consiglio vivamente utilizzando lo strumento Wix Heat.exe per raccogliere tutti i dati necessari per registrare il componente COM e quindi fare riferimento il frammento nel vostro .wxs file in questo modo:

<ComponentGroupRef Id="FooBar.dll" /> 

o includere nel il vostro file .wxs come questo:

<?include FooBar.dll.wxi?> 

questo metodo ti dà il pieno controllo su ciò che accade durante la registrazione/annullamento della registrazione del componente COM.

È comunque possibile utilizzare Regsvr32 in un progetto Wix. Ma si basa sulla corretta attuazione delle funzioni RegisterServer/UnregisterServer nel componente COM

<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> 

Allora aggiungi la tua azione per la sequenza di installazione.

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

Ho usato lo strumento di calore per generare e quindi copiato l'output nel mio file .wxs. – rakheep

+0

@rakheep: Se trovi una risposta utile, per favore svotala. Quando hai ricevuto una o più risposte corrette, seleziona la migliore come risposta. – JOG

+0

Sembra che nel tuo post non sia presente il comando di annullamento della registrazione. Inoltre ho dovuto usare questo metodo quando non riuscivo a estrarre le informazioni del registro usando heat per 1 particolare dll. Ha funzionato per tutti tranne uno in un particolare progetto. –

2

Si potrebbe provare a utilizzare il programma heat.exe, e quindi fare riferimento il frammento nel codice Wix.

file di heat.exe -Gg -out

Come in:

file di heat.exe my.dll -Gg -out my.wxs

Ps. Aggiungendo l'opzione -gg si generano i guids, altrimenti si può saltare se si desidera aggiungerli manualmente.