Cómo copiar el valor del registro binario en WiX

Necesito copiar un valor de registro binario (REG_BINARY) en una clave de registro en un nodo Wow6432.

El valor está en HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId

El objetivo del instalador de WiX es x86

la maquina es de 64 bits

7 64 bits de Windows

A continuación se muestra la parte de mi secuencia de comandos WiX que intenta hacer la copia. Nota: @Win64=sí, que asumo tomará el valor de NON-Wow6432Node. El resultado es un mensaje de error durante la instalación.

No se pudo escribir el valor DigitalProductID en la clave... verifique que tenga suficiente acceso a esa clave

 <Property Id="PROPERTYBINARY">
  <RegistrySearch Id='searchbinary'
                  Type='raw'
                  Win64='yes'
                  Root='HKLM'
                  Key='SOFTWARE\Microsoft\Windows NT\CurrentVersion'
                  Name='DigitalProductId'/>
 </Property>

  <Component Id="componentbinary" Guid="{04367CD7-B41A-4A1D-81C7-E24029FF4926}>
      <RegistryValue 
          Id='registrykeybinary' 
          Root='HKLM' 
          Key='Software\mycompany\myapp' 
          Type='binary' 
          Name='DigitalProductId' 
          Value="[PROPERTYBINARY]" 
          KeyPath='yes' 
          Action='write'/>
  </Component>

Copiar una cadena (por ejemplo, HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentType) funciona y crea el valor en Wow6432Node, por ejemplo

<Property Id="PROPERTYSTRING">
  <RegistrySearch Id='searchstring'
                  Type='raw'
                  Win64='no'
                  Root='HKLM'
                  Key='SOFTWARE\Microsoft\Windows NT\CurrentVersion'
                  Name='CurrentType'/>
</Property>


  <Component Id="componentstring"  Guid='{F7231D06-DC3B-4D0F-BCBC-EDBD4DF38CA2}'>
      <RegistryValue Id='registrykeystring'
         Root='HKLM' 
         Key='Software\mycompany\myapp'  
         Type='string' Name='CurrentType' 
         Value="[PROPERTYSTRING]" 
         KeyPath='yes' 
         Action='write'/>
  </Component>

La exportación del registro (tanto de los valores binarios como de cadena) es:

   Windows Registry Editor Version 5.00

   [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\mycompany]

   [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\mycompany\myapp]
   "DigitalProductId"=hex:
   "CurrentType"="Multiprocessor Free"

(Alternativas que he probado: lo mismo que arriba pero usando RegistryKey y RegistryValue

   <RegistryKey ...
          <RegistryValue 

)

mi pregunta es la misma que esta Lectura y escritura en claves de registro x86 y x64 desde la misma aplicación pero en lugar de hacerlo en C# estoy usando WiX. Tal vez necesito una acción personalizada como en esta publicación. Wix: escribir entradas de registro en HKCU\Software\Classes\Wow6432Node ?

preguntado el 03 de diciembre de 13 a las 12:12

1 Respuestas

Como ahora contestado in esta pregunta Me las arreglé para hacer que esto funcione por

  1. Creación de una acción personalizada (C#).
  2. Llamar a la acción personalizada durante InstallExecuteSequence.

Para entender el problema real, esta pregunta ayudó. Cuando el instalador se ejecuta en una máquina de 64 bits como una aplicación de 32 bits, el registro de 64 bits no es visible, solo Wow6332Node (y todas las entradas comunes). La acción personalizada puede acceder a la parte de 64 bits del registro mediante

 RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser,RegistryView.Registry64);
 key = key.OpenSubKey(@"Software\Classes\Wow6432Node", true);

contestado el 23 de mayo de 17 a las 11:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.