Domanda

sto usando WIX 3.6 Per creare un installatore.

Una delle esigenze è di scrivere la posizione della posizione di installazione al registro in HKCU o HKLM a seconda della proprietà Alluser.

Ora in base alla ricerca che ho fatto penso che il seguente dovrebbe funzionare

<RegistryKey Root="HKMU" 
             Key="Software\OpenCover" 
             Action="createAndRemoveOnUninstall">
  <RegistryValue  Name="Location" 
                  Type="string" 
                  Value="[APPLICATIONFOLDER]" 
                  Action="write" 
                  KeyPath="yes" />
</RegistryKey>

Il problema è che funziona solo per quando Allusers = "" IE HKMU viene interpretato come HKCU.

Se provo un'installazione di Permachine in cui Alluser = 1, la voce non viene scritta su HKLM come previsto, anche se quando guardo il file di registro del programma di installazione vedo la chiamata a WriteRegistryValues.

MSI (s) (D4:14) [22:46:24:901]: Executing op: ActionStart(Name=WriteRegistryValues,Description=Writing system registry values,Template=Key: [1], Name: [2], Value: [3])
Action 22:46:24: WriteRegistryValues. Writing system registry values
MSI (s) (D4:14) [22:46:24:902]: Executing op: ProgressTotal(Total=2,Type=1,ByteEquivalent=13200)
MSI (s) (D4:14) [22:46:24:903]: Executing op: RegOpenKey(Root=-1,Key=Software\OpenCover,,BinaryType=0,,)
MSI (s) (D4:14) [22:46:24:903]: Executing op: RegAddValue(Name=ConsoleLocation,Value=C:\Program Files (x86)\OpenCover\,)
WriteRegistryValues: Key: \Software\OpenCover, Name: ConsoleLocation, Value: C:\Program Files (x86)\OpenCover\
MSI (s) (D4:14) [22:46:24:906]: Executing op: RegCreateKey()
WriteRegistryValues: Key: \Software\OpenCover, Name: , Value: 

Qualcuno può spiegare come ottenere l'attività che devo completare

È stato utile?

Soluzione

Il problema ha effettivamente a che fare con un installatore a 32 bit su una piattaforma a 64 bit.

Quando Allusers = "1" viene utilizzato in questo scenario, le voci del registro, contrassegnate con HKMU, vengono effettivamente scritte, ma in questo caso, HKLM software wow6432Node OpenCover. Sospetto che anche le voci contrassegnate come HKLM vengano reindirizzate allo stesso modo.

Purtroppo la documentazione su Azione WriteRegistryValues Non spiega il bit 32/64 di reindirizzamento "magico" e le informazioni, i dettagli relativi alla voce effettiva del registro, non vengono visualizzati nei registri.

Per ottenere un'idea di ciò che sta accadendo, il seguente articolo demistifica il comportamento osservato Chiavi del registro colpite da wow64. Da questo articolo possiamo vedere che l'installatore "pensa" sta scrivendo in una cartella HKLM software, ma questo è effettivamente essendo "Reiniredd" a HKLM wow6432Node software per un processo a 32 bit su una piattaforma a 64 bit e quindi spiega perché non si riflette nei file di registro. L'articolo spiega anche perché quando Allusers = "" e HKMU sono allora HKCU perché le voci appaiono dove ci si aspetterebbe che siano, perché queste voci lo sono "condivisa" Tra le applicazioni da 32 e 64 bit.

Altri suggerimenti

La mia ipotesi è che il tuo installatore non eleva (abilitato UAC?) E che la scrittura su HKLM venga reindirizzata a HKCU.

A proposito, è anche possibile prendere in considerazione l'utilizzo dell'API di installazione di Windows dall'interno dell'applicazione per interrogare UpgradeCode, ProductCode, ProductInformation (InstallaLocation) senza la necessità di scrivere una chiave di registro per archiviare questi metadati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top