Domanda

Ho cercato di determinare la soluzione migliore per la registrazione di un server COM utilizzando WiX per creare un pacchetto di Windows Installer e sto lottando.

In questo post Archivio di ingegneria di distribuzione: HOWTO: Utilizzare Regsvr32.exe con WIX , esiste una richiesta aperta per & Quot; Setup polizia & Quot; per reprimere l'utilizzo di regsvr32 attraverso un'azione personalizzata exe. Conosco i mali dell'utilizzo di regsvr32 mentre si registra al sistema piuttosto che all'utente, ma ricordo anche che OleSelfRegister può avere problemi da un bollettino di supporto microsoft (scusate, non riesco a trovare il collegamento) - e credo hanno raccomandato di usare <=>.

Qualche consiglio?

È stato utile?

Soluzione

Leggi " Non utilizzare le tabelle SelfReg e TypeLib " in:

https://msdn.microsoft.com/en-us/library / bb204770 # no_selfreg

Per WiX, dai un'occhiata all'elemento Componente nel riferimento allo schema all'indirizzo:

http://wixtoolset.org/documentation/manual/v3 /xsd/wix/component.html

Prendi nota di alcuni elementi figlio come AppId , Class , ProgId , Registry e così via. La tecnica corretta consiste nell'utilizzare COM extraction per riflettere le informazioni di registrazione ed emetterle in modo dichiarativo nell'installer in modo che MSI possa occuparsene senza andare fuori processo ad alcuni codici (come DllRegisterServer()) che potrebbero non riuscire e fornisce informazioni MSI sull'impronta del componente dal punto di vista della riparazione e della pubblicità.

Altri suggerimenti

C'è uno strumento " Tallow " incluso con Wix. Puoi usarlo per generare automaticamente le voci di registro corrette. Quindi configura semplicemente l'installazione di WIX per scrivere quelle voci. Selfreg non dovrebbe essere usato.

Come sottolineato da @Trampster, heat.exe non fa un buon lavoro nel raccogliere voci di registro dai server COM. Ho provato ma i risultati sono stati incompleti.

Invece, seguendo i consigli su Monitora gli accessi al registro (Strumenti InstallSite: Monitoraggio) , ho usato InstallShield RegSpyUI. Ciò presumibilmente viene fornito con versioni di InstallShield v7 e successive, inclusa la versione di valutazione. Queste informazioni potrebbero non essere aggiornate; Posso confermare che non viene fornito con il quasi inutile InstallShield LE fornito con VS2013.

Fortunatamente avevo una copia di InstallShield 2010 e questo è arrivato con RegSpyUI.

Ad ogni modo, RegSpyUI è stato un gioco da ragazzi: puntalo su COM .exe, estrai le informazioni del registro in un file .reg. Quindi usa il calore per raccoglierlo in un file .wxs che puoi aggiungere al tuo progetto Wix

heat reg <some.reg> -gg -o <some.wxs>

Quindi si tratta solo di modificare eventuali percorsi codificati che puntano alla posizione di COM .exe in modo che riflettano la cartella di installazione prevista.

es. se il file .wxs creato da RegSpyUI + heat ha qualcosa del genere

<Fragment>
    <DirectoryRef Id="TARGETDIR">
        <Component Id="blah" Guid="{xxxxxxxxxxxxxxxxxxxxxxxxx}" KeyPath="yes">
            <RegistryKey Key="TypeLib\{xxxxxxxxxxxxxxxxxxxxxx}\4.1\0\win32" Root="HKCR">
                <RegistryValue Value="C:\Users\you\projects\MyProject\dependencies\installation\COMFOO.exe" Type="string" />
            </RegistryKey>
        </Component>
    </DirectoryRef>
</Fragment>

e stai installando nel tuo file wix principale in

<Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder" Name="PFiles">
            <Directory Id="COMPANY" Name="My Company">
                <!--This is the actual installation folder-->
                <Directory Name="MyProduct" Id="MYPRODUCT">

quindi modifica semplicemente il percorso del valore RegistryValue @ in ... " [MYPRODUCT]\COMFOO.exe "

C'è solo uno svantaggio di questo: la registrazione WiX Com con heat.exe non funziona per i server COM .exe. InstallShield e i suoi strumenti sembrano supportarlo, ma RegSpyUI è solo uno strumento dell'interfaccia utente, non uno che posso eseguire sul mio computer di generazione.

Prova questo:

  1. Crea un nuovo progetto .NET
  2. Aggiungi un riferimento di progetto al candidato COM dll o exe OOP di cui desideri raccogliere le lettere
  3. Cerca il file Interop.candidate.dll (nella obj\debug cartella)
  4. Esegui lo strumento WiX Heat sulla dll di interop che hai appena trovato.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top