Pregunta

estoy usando Wix 3.6 Para crear un instalador.

Una de las necesidades es escribir la ubicación de la ubicación de instalación en el registro en HKCU o HKLM dependiendo de la propiedad Allusers.

Ahora, según la investigación que he hecho, creo que lo siguiente debería funcionar

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

El problema es que solo funciona para cuando Allusers = "" es decir, HKMU se interpreta como HKCU.

Si intento una instalación de Permachine donde Allusers = 1, la entrada no se escribe en HKLM como se esperaba, aunque cuando miro el archivo de registro del instalador veo la llamada 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: 

¿Alguien puede explicar cómo lograr la tarea que necesito completar?

¿Fue útil?

Solución

El problema tiene que ver con un instalador de 32 bits en una plataforma de 64 bits.

Cuando se usa Allusers = "1" en este escenario, las entradas del registro, marcadas con HKMU, en realidad se están escribiendo, pero en este caso, HKLM Software Wow6432Node opencover. Sospecho que las entradas marcadas como HKLM también se redirigen de la misma manera.

Desafortunadamente la documentación en Acción de WriterEgistryValues No explica el 32/64 bit de redirección "mágica" y la información, los detalles sobre la entrada del registro real, no aparecen en los registros.

Para obtener una idea de lo que está sucediendo, el siguiente artículo desmitifica el comportamiento observado Claves de registro afectadas por wow64. De este artículo podemos ver que el instalador "piensa" está escribiendo en una carpeta HKLM Software, pero esto en realidad está siendo "Redirigido" a HKLM WOW6432Node Software para un proceso de 32 bits en una plataforma de 64 bits y, por lo tanto, explica por qué no se refleja en los archivos de registro. El artículo también explica por qué cuando Allusers = "" y Hkmu son entonces HKCU por qué las entradas aparecen donde uno esperaría que estén, porque estas entradas son "compartido" entre 32 y 64 aplicaciones de bits.

Otros consejos

Supongo que su instalador no está elevando (¿UAC habilitado?) Y que la escritura a HKLM está siendo redirigida a HKCU.

Por cierto, también puede considerar usar la API del instalador de Windows desde su aplicación para consultar el UpdateDecode, ProductCode, ProductInformation (InstallLocation) sin la necesidad de escribir una clave de registro para almacenar estos metadatos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top