2014-12-11 17 views
5

Posso impostare una chiave di registro a 64 bit per fare riferimento a un percorso di file di programma a 32 bit utilizzando WiX?Installa i file a 32 bit e le impostazioni del registro a 64 bit nell'installer WiX

Sto scrivendo un plug-in per un altro software. Voglio che il mio plugin dll vada in C:\Program Files (x86)\MyPlugin\MyPlugin.dllnon in C:\Program Files\MyPlugin\MyPlugin.dll perché la DLL è a 32 bit, non a 64 bit.

Tuttavia, ho bisogno della chiave di registro per andare in HKLM/Software/Company/Product/Etc....non nel HKLM/Wow6432Node/Software/Company/Product/Etc.... perché il processo che in realtà legge la chiave di registro è a 64 bit. Quel processo a 64 bit legge il registro e avvia un processo a 32 bit per sandbox la DLL.

C'è un modo per farlo? Ho provato a utilizzare diversi componenti con diversi valori di attributo Win64 e persino a inserirli in gruppi di componenti separati. Tuttavia, continuo a ricevere questi errori di generazione (non avvisi):

ICE80: This 64BitComponent RegistryComponent uses 32BitDirectory INSTALLFOLDER 

risposta

2

Se sostenete macchine a 32-bit e 64-bit è necessario due setup MSI distinte:

http://blogs.msdn.com/b/heaths/archive/2008/01/15/different-packages-are-required-for-different-processor-architectures.aspx

Così il vostro 32 -bit installa crea qualsiasi voce COM per qualsiasi client a 32 bit e l'installazione a 64 bit ha componenti a 32 bit e 64 bit che scrivono nel registro.

http://msdn.microsoft.com/en-us/library/aa367451(v=vs.85).aspx

+0

Questa mi sembra la risposta corretta. Penso che possano essere combinati usando Burn: http://wixtoolset.org/documentation/manual/v3/bundle/ – Hans

3

Una soluzione un po 'scarsa, ma si può solo un'azione personalizzata per aggiungere voci di registro, se non ti dispiace che si attacchino in giro dopo una disinstallazione.

Se si scrive un'azione personalizzata in C# si può solo fare qualcosa di simile:

using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) 
{ 
    // do it 
} 
+0

Devo ammettere che occasionalmente lo faccio. A volte ho una installazione che è 99% x86 e 1% x64 e andrò contro il mio normale credo e fare un po 'di magia fuori dalla scatola per colpire una singola voce di registro o qualcosa del genere. L'alternativa è un full msi a 32 bit e 64 bit con un bootstrapper/chainer per incapsulare tutto. Secondo me, la piattaforma 1 di Windows Installer per .MSI è piuttosto scadente. –

+0

È un po 'indecente lasciare le voci di registro lì dopo l'installazione – Hans

+0

@Hans Concordato. Se non mi sbaglio, potresti anche scrivere un'azione personalizzata che cancellerà le stesse voci del registro e la eseguirà durante la disinstallazione. – user145400

2

una soluzione piuttosto facile avere una sola versione installer per 32 e 64 bit è quello di esportare un file reg con i tasti che si desidera aggiungere (da regedit) e quindi eseguire un'azione personalizzata durante l'installazione, vale a dire:

<CustomAction Id='Add_Registry_Keys' Execute='deferred' Directory='DriverDir' Impersonate='no' ExeCommand='regedit.exe /s &quot;[DriverDir]default.reg' Return='ignore' />

+1

Ancora una volta, è un po 'schifoso lasciare le voci di registro lì dopo l'installazione – Hans

+0

Accetto! Con lo strumento da riga di comando "reg" si potevano cancellare di nuovo le chiavi di registro sulla disinstallazione. –

0

È possibile eliminare gli errori ICE anche, non solo avvertimenti. Ciò significa che è possibile utilizzare gli attributi Win64 in x86 msi. L'impostazione per ignorare le convalida ICE si trova nelle Proprietà del progetto nella scheda Impostazioni strumento.

Potrebbe non essere raccomandato, ma se funziona è ancora meglio dell'alternativa di un'azione personalizzata.

Problemi correlati