¿Cambiar mi GUID de componentes en wix?


¿Cuándo debo cambiar o no mi GUID de componente en WIX? La información del SDK de Microsoft es confusa.

Glytzhkof edit : Para aclarar, la pregunta trata sobre cuándo se debe cambiar un GUID de componente para un componente MSI. Un componente puede cambiar con aspectos tales como: ruta de destino cambiada, adición o eliminación de archivos a/desde el mismo componente, adición de datos de registro, etc... Esto causa problemas con respecto al llamado componente referencia, es decir, la mejor práctica para crear componentes en MSI.

Author: Wolf, 2009-09-10

3 answers

El concepto general de MSI es que hay una asignación 1:1 entre un GUID de componente (identificador único) y una ruta absoluta (ubicación de instalación / ruta de clave). La ruta completa, incluyendo el nombre del archivo si lo hay. Ver actualización a continuación para una nueva función de Wix para tratar de forma automática mágicamente con esto.

Utilizo algunas reglas simples para tratar con las reglas de componentes excesivamente complejas y sin sentido:

  • Siempre use un componente separado por archivo (incluso para no binarios). Esto evita todo tipo de problemas. Hay algunas excepciones:
    • Los ensamblados.NET multi-file deben estar todos en un componente, ya que siempre deben instalarse / desinstalarse como una sola unidad.
    • Algunos otros tipos de archivos generales vienen en "pares coincidentes" - pertenecen juntos. A menudo estos son archivos de contenido e índice. Como ejemplo, considere los archivos de ayuda de Microsoft:
      • .HLP y .Los archivos CNT pertenecen juntos.
      • .CHM y .Los archivos CHI pertenecen juntos.
    • Es probable que haya varios de estos tipos de archivos que pertenecen juntos y, por lo tanto, deben colocarse en el mismo componente para que instalen/desinstalen juntos - sospecho que ciertos archivos de certificados son candidatos. Es difícil llegar a una lista definitiva. Simplemente pregúntese "¿estos archivos siempre pertenecen juntos" - por lo que siempre aparecen en pares cada vez que hay una nueva versión? En caso afirmativo, instálelos a través del mismo componente. Establecer el archivo versionado, si lo hay, como archivo de clave.
  • Recuerde que una vez que haya asignado un GUID para un componente, se establece en piedra para la ruta clave de ese componente (ruta absoluta). Si mueve el archivo a una nueva ubicación o cambia el nombre del archivo, déle un nuevo GUID de componente (ya que la ruta absoluta es diferente, es efectivamente una nueva identidad).
  • En resumen, los GUID de componentes están vinculados a una ubicación de instalación absoluta, y no a un archivo específico. El GUID no sigue el archivo alrededor si se mueve. La referencia GUID cuenta una ubicación absoluta, no el archivo per se.
  • No agregue ni elimine archivos de un componente existente. Todo tipo de problemas de actualización y parcheo resultan. Esta es la razón por la que me gusta un archivo por componente como regla general.
  • Hay mucho más en la referencia de componentes, pero lo dejaré así para una "visión general".

Algunas muestras:

  • Cambia el nombre del archivo C:\Program Files\MyCompany\MyApp\MyFile.exe a C:\Program Files\MyCompany\MyApp\MyFile_NEW.exe. ¿Qué significa esto para la creación de componentes? Esta es una nueva ruta de instalación absoluta, por lo que genera un nuevo GUID para el componente de alojamiento, O agrega un nuevo componente y elimina el antiguo (que tiene el mismo efecto).
  • Su MSI actualizado entrega una nueva versión de MyFile.exe. La ubicación es la misma que antes, esto significa que el GUID del componente no debe cambiar. Es el mismo archivo (identidad), solo en una versión diferente.

ACTUALIZACIÓN: WIX ahora tiene un nuevo generar automáticamente el componente GUID característica que calcula un GUID tan largo como la ruta de destino sigue siendo el mismo. No he probado esto para ser honesto, pero muchos parecen usarlo sin problemas, y Rob Mensching (autor de Wix) afirma que es seguro para el uso normal. Como concepto recomiendo encarecidamente esto, ya que cuenta con algunos auto-magia y te protege de alguna complejidad.

También tenga en cuenta que puede omitir muchos atributos de origen de su archivo Wix xml y confíe en los valores predeterminados de Wix en lugar de los valores de codificación duros.

 44
Author: Stein Åsmul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-06 12:32:21

Nunca se cambia el Componente/@Guid. Tampoco cambia nunca el conjunto de Recursos (File, RegistryKey, Atajo, TypeLib, etc.).) en el Componente. Cuando tenga un nuevo recurso, debe crear un nuevo componente con un nuevo @ Guid. La parte realmente complicada es que el nuevo componente no puede tener superposición (piense en la ruta del archivo,o la ruta de la clave del registro, o typelib, etc.) con el Componente antiguo.

Estas son básicamente las Reglas del Componente, echa un vistazo: http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101 .

 17
Author: Rob Mensching,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-10 14:29:05

Eche un vistazo al Tutorial de WiX , Los Archivos Dentro de, para una explicación detallada sobre las reglas de los componentes. Básicamente, dice que nunca cambias el GUID de un componente, ya que eso significa dejar huérfano el componente antiguo y crear un componente nuevo.

 0
Author: OregonGhost,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-14 03:06:42