¿Cuál es el atributo wix 'KeyPath'?

124

¿Qué es el atributo Wix ' KeyPath '? En particular, cómo se aplica a lo siguiente:

<Component Id="ProgramMenuDir" Guid="*">
  <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
  <RegistryValue Root="HKCU" Key="Software\CompName\AppName" 
                 Type="string" Value="" KeyPath="yes" />
</Component>
Seth
fuente
111
OMG la documentación de Wix es completamente inútil. El documento wix dice, para el atributo KeyPath, que si lo configura en "Sí", entonces el archivo se trata como la ruta clave para el componente. Tan servicial !!
Cheeso
55
@RobMensching: aprecia tu espíritu y tu voluntad de contribuir a la comunidad. Decirme cómo NO quejarme no es tan bueno como decirme (y a otros) cómo quejarme. Si supiera el lugar para criar un error, hace 2 años, lo habría hecho. Además, como puede ver en los votos a favor, aparentemente otras personas sienten lo mismo. Tal vez sea hora de este tipo de mensaje: "¡Ayuda a mejorar WiX! Por favor, genera los errores apropiados haciendo clic AQUÍ ".
Cheeso
21
¡Lo haré, @Cheeso! Archiva los
Rob Mensching
8
@Cheeso El concepto clave para entender es que un proyecto de instalación de WiX crea un paquete de Windows Installer. Los documentos de WiX no (y en su mayoría no deberían) duplicar los documentos de Windows Installer. Aunque a menudo puede usar una construcción WiX sin comprender las tablas de Windows Installer que admite, si tiene alguna pregunta, debe consultar los documentos en MSDN. Para componentes, comience aquí .
Tom Blodget
30
@TomBlodget: diría que WiX DEBE duplicar los documentos de Windows Installer. Para la mayoría de los usuarios, la división del instalador WiX / Windows simplemente causa confusión, y cuanto más se pueda ocultar al usuario final, más fácil será usar la herramienta en general.
Scott Stafford

Respuestas:

122

Como lo explicó Rob Mensching :

KeyPath para un componente es un recurso único que el instalador de Windows usa para determinar si un componente "existe" en una máquina.

Esto significa que cuando Windows Installer decide si instala su componente, primero verá si el recurso keypath ya está presente. Si es así, ninguno de los recursos en el componente está instalado.

La presencia del recurso keypath también determina si un componente se ha dañado o ha desaparecido cuando "repara" un MSI.

Cuando el recurso keypath es un archivo versionado, Windows Installer considerará que existe solo si encuentra un archivo con una versión igual o superior.

En su ejemplo específico, tiene un componente que elimina una carpeta en la desinstalación. Este componente solo se instalará si la clave de registro dada aún no existe. Agregar una clave de registro para usar como ruta clave es un truco común cuando necesita una ruta clave para un componente que instala recursos que no se pueden usar como una ruta clave, como un acceso directo .

Wim Coenen
fuente
44
Entonces, ¿cuál es el punto de dar explícitamente al único archivo en un componente un atributo keypath = "no"?
Christopher B. Adkins
44
@Adkins: eso suprimiría el comportamiento predeterminado de wix para tomar ese archivo como la ruta de acceso clave. Como resultado, no se escribe ninguna ruta de acceso a la base de datos del instalador para ese componente. Durante la instalación, el instalador de Windows usará la carpeta de destino del componente como la ruta de acceso clave. Otra forma de obtener este comportamiento es establecer "keypath = yes" en el elemento componente en sí. En cualquier caso, no me parece una buena idea.
Wim Coenen