2012-09-17 14 views
8

Sto tentando di registrare una DLL utilizzando WiX. Ora so e capisco che devo usare heat per ottenere le informazioni del registro per me, ma il calore sembra non riuscire con il seguente messaggio di errore: heat.exe : warning HEAT5150 : Could not harvest data from a file that was expected to be a SelfReg DLL: C:\Users\seb\Desktop\Development\addin.dll. If this file does not support SelfReg you can ignore this warning. Otherwise, this error detail may be helpful to diagnose the failure: Unable to load file: C:\Users\seb\Desktop\Development\addin.dll, error: 193Impossibile registrare DLL tramite WiX

Mi sono guardato intorno e ho trovato questo post che spiega un po ' più in dettaglio su registering DLLs ma vorrei evitare il percorso di auto registrazione, se possibile. Vedo anche menzione di registrazione manuale delle DLL più in basso, ma non sono molto esperto con il registro o con gli oggetti COM per sapere dove potrei ottenere il CLSID, ProgId e qualsiasi altra informazione menzionata.

Se qualcuno può indicarmi la giusta direzione o spiegarmi cosa devo fare per eseguire la DLL tramite heat, sarebbe molto apprezzato.

risposta

1

È una DLL nativa non gestita? Dependency Walker mostra eventuali dipendenze mancanti? Di solito questo significa che DllRegisterFunction non è riuscito e Heat non è stato in grado di estrarre alcun dato. Risolvi il problema e dovresti ottenere una buona meta XML.

+0

È una DLL creata utilizzando ATL 6.0. Se chiamo regserv32 su di esso tutto va bene e il sistema lo riconosce, ma fino ad ora è sempre stato caricato come SelfReg. – Seb

+0

Questo tipo di problema è davvero difficile da risolvere. Se puoi condividere la DLL, posso provare ad estrarla per te. È inoltre possibile utilizzare uno strumento di istantanea del Registro di sistema su una macchina pulita per acquisire regsvr32 e quindi manualmente l'autore in wxs. Oppure usa la valutazione InstallShield per estrarre il COM e il WiX scuro per decompilarlo nuovamente in wxs. Un sacco di trucchi ma richiedono esperienza. –

+0

Impossibile condividere la DLL a causa della sua proprietà aziendale, ma ho provato a utilizzare RegSpy ed è stato congelato per circa 8 ore. Sperando che stia solo cercando di estrarre i dati. – Seb

0

Avevo lo stesso problema con Wix heat.exe: avviso HEAT5150: Impossibile raccogliere i dati da un file che ci si aspettava fosse una DLL SelfReg. Il motivo è che dll non è stata in grado di trovare la dipendenza da caricare. Penso che tu debba avere problemi simili. Ho eseguito lo strumento Process Monitor e il filtro applicato per catturare l'evento heat.exe. Sono stato in grado di trovare la causa principale del problema. Fondamentalmente ho dovuto inserire tutte le dll di dipendenza nella stessa posizione in cui si trovava la mia dll principale. Per il tuo caso addin.dll deve puntare alla stessa posizione in cui si trovano le dll dipendenti.

Il seguente blog su questo avviso mi ha aiutato molto a capire la causa principale.

http://marc.durdin.net/2009/12/case-of-hidden-exception.html?

+1

Dopo aver passato quasi un giorno ad ambientarlo, non ho ancora capito nulla di questo. L'errore mostrato nel post del blog parla di un'eccezione generata dal target. Nel mio caso il calore lancia l'eccezione dicendo che il file non è stato in grado di caricare. Ho persino aggiunto tutte le dipendenze mostrate in Process Monitor. Ancora ottengo l'errore. Forse sono solo bloccato con la registrazione di questa DLL. – Seb

11

So che questo è vecchio ma volevo aggiungere una risposta qui - il motivo per cui questo si verifica è perché la DLL che stai cercando di registrare è 64 bit dll - e Heat.exe è a 32 bit, quindi non può caricare la DLL in il suo spazio di indirizzi. Ad ogni modo, basta puntare a una versione a 32 bit della DLL per creare il file wxs e non dovresti ricevere quell'errore.