2012-10-12 278 views
6

Estoy intentando escribir una secuencia de comandos de Windows Installer en WiX 3.6 con una configuración de arquitectura solo por máquina y x64. Tengo la siguiente estructura del proyecto (abreviado):Error "ICE38: instalación de componentes en el perfil de usuario" para un componente específico

<Directory Id="ProgramFiles64Folder" Name="PFiles"> 
    <Directory Id="APPLICATIONFOLDER" Name="My Company"> 
     <Directory Id="ProductFolder" Name="My Product"> 
     <Component Id="MainComponent" Guid="" Win64="yes" KeyPath="yes"> 
      ... 
     </Component> 
     <Directory Id="DataFolder" Name="Data"> 
      <Directory Id="Machine" Name="Machine" > 
      <Directory Id="MachinesFolder" Name="Machines"> 
       <Component Id="Machine1" Guid="{74341536-72DF-48C3-95E8-2851D9FA8318}" Win64="yes" KeyPath="yes"> 
         ... 
       </Component> 
      </Directory> 
      <Directory Id="TemplateFolder" Name="Template"> 
       <Component Id="TemplateFiles" Guid="{A0D0C225-D604-4B84-971D-41687A30EC36}" Win64="yes" KeyPath="yes"> 
       <File Id="Template1.rsbak" Source="$(var.SolutionDir)bin\Release\File1.rsbak" /> 
          ... 
       </Component> 
      </Directory> 
      </Directory> 
     </Directory> 
     </Directory> 
    </Directory> 
</Directory> 

El problema es que recibo el error ICE38: Component TemplateFiles installs to user profile. It must use a registry key under HKCU as its KeyPath, not a file para el componente TemplateFiles cuando compilo. Lo que me confunde es que utilizo una estructura similar en otro proyecto (en funcionamiento) y tengo varios componentes con la misma configuración en mi proyecto (no se muestra arriba). ¿Por qué este componente, y solo este, insiste en instalar en el perfil de usuario cuando todos los demás se instalan correctamente, en Archivos de programa?

Respuesta

5

Parece que hay una diferencia significativa para msi entre Program Files y Users\UserName\Documents carpetas. El último se hace referencia en el ejemplo:

<Directory Id="DataFolder" Name="Data"> 

Vine al problema similar y encontró una respuesta en el blog - http://robmensching.com/blog/posts/2007/4/27/How-to-create-an-uninstall-shortcut-and-pass-all-the

En definitiva es necesario definir RegistryKey en HKCU raíz que subelemento a Component y agregue el elemento RemoveFolder como subelemento al Directory. Vea el enlace de arriba para ver un ejemplo completo. Además:

  • Quitar KeyPath atributo del elemento Component
  • RemoveFolder posiblemente tendrá que ser definido para todas las carpetas. Utilicé un componente ficticio sin ningún archivo dentro de ese
+0

Gracias. Aunque mi problema se resolvió solo (!?) cuando nos vimos obligados a reestructurar nuestras carpetas, creo que su respuesta es la forma correcta de hacerlo. –

+0

Placer. Yo tuve el mismo problema yo mismo. Entonces se agregó una solución para los próximos tipos que lo tendrán. –

Cuestiones relacionadas