2009-09-10 15 views
19

¿Cuándo debería cambiar o no el GUID de mi componente en WIX?The Microsoft SDK information is confusing.¿Cambiar mi GUID de componente en wix?

Glytzhkof edit: Para aclarar, la pregunta se refiere a cuándo se debe cambiar un GUID de componente para un componente MSI. Un componente puede cambiar con aspectos tales como: ruta de destino modificada, adición o eliminación de archivos desde/hacia el mismo componente, adición de datos de registro, etc. Esto ocasiona problemas con respecto a la llamada referencia de componentes, es decir, best practice for creating components en MSI. .

+1

¿Podría añadir más detalles a su pregunta? No estoy exactamente seguro de lo que estás preguntando. –

Respuesta

37

El concepto general de MSI es que hay un 1: mapeo de 1 entre un GUID componente (identificador único) y un ruta absoluta (ubicación de instalación/ruta de la clave). La ruta completa, incluido el nombre del archivo, si corresponde. Consulte la actualización a continuación para ver una nueva característica de Wix para manejar esto de manera auto-mágica.

Consumo reglas simples para hacer frente a las normas de componentes excesivamente complejos y sin sentido:

  • Use siempre un componente separado por archivo (incluso para los no binarios). Esto evita todo tipo de problemas. Hay algunas excepciones:
    • ensamblados .NET de varios archivos deben estar todos en un solo componente, ya que siempre se deben instalar/desinstalar como una sola unidad.
    • Algunos otros, tipos de archivos generales vienen en "matching pairs" - pertenecen juntos. A menudo estos son archivos de contenido e índice. Como ejemplo, considere los archivos de ayuda de Microsoft:
      • . Los archivos HLP y .CNT deben estar juntos.
      • . Los archivos .CHM y .CHI pertenecen juntos.
    • Es probable que haya varios tipos de archivos de este tipo que estén juntos y, por lo tanto, deben colocarse en el mismo componente para que se instalen/desinstalen juntos. Sospecho que ciertos archivos de certificado son candidatos. Es difícil encontrar una lista definitiva. Simplemente pregúntese "¿estos archivos siempre van juntos?" - ¿entonces siempre aparecen en pares cada vez que hay una nueva versión? En caso afirmativo, instálelos a través del mismo componente. Establezca el archivo versionado, si lo hay, como archivo de clave.
  • Recuerde que una vez que ha asignado un GUID para un componente, está escrito en piedra para la ruta de la clave de ese componente (ruta absoluta). Si mueve el archivo a una nueva ubicación o cambia el nombre del archivo, dele un nuevo GUID de componente (dado que la ruta absoluta es diferente, efectivamente es una nueva identidad).
  • En resumen, los GUID de los 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 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 reparación resultan. Es por eso que me gusta un archivo por componente como regla general.
  • Hay mucho más para referenciar componentes, pero lo dejo para una "descripción general".

Algunas muestras:

  • cambia el nombre del archivo C: \ Archivos de programa \ MyCompany \ MyApp \ myfile.exe a C: \ Archivos de programa \ 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 anterior (que tiene el mismo efecto).
  • Su MSI actualizado ofrece 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 una nueva característica que auto-generate component GUIDcalculates a GUID siempre y cuando la ruta de destino sigue siendo el mismo. No he probado esto para ser sincero, pero muchos parecen usarlo sin problemas, y Rob Mensching (Wix author) states it is safe for normal use. Como concepto, recomiendo esto ya que cuenta con auto-magic y lo protege de cierta complejidad.

También tenga en cuenta que you can leave out a lot of source attributes from your Wix xml file y confíe en los valores predeterminados de Wix en lugar de valores de codificación difíciles.

+1

La mejor respuesta que he leído. Tu Rock !! – Rohit

+3

La parte sobre "ruta absoluta" no es exactamente cierta. Puede instalar el mismo Componente (mismo GUID) en diferentes directorios y el conteo de referencias funciona correctamente. Los directorios ponen una arruga en la simplicidad de las declaraciones anteriores. –

+1

Después de calcular los costos y la resolución de la tabla de directorio con sus propiedades de directorio y después de que el usuario haya (tal vez) seleccionado un directorio de instalación, los GUID de los componentes apuntarán a las rutas de acceso de claves absolutas. Creo que la forma más sencilla de ver esto es centrarse en su carpeta de origen: si mueve un archivo en la carpeta de origen, cambia el GUID. La ubicación de instalación real es un "objetivo en movimiento" hasta el momento en que se resuelven los directorios, pero por lo que yo sé siempre se termina con una ruta absoluta como ruta clave para cada componente instalado. –

0

Eche un vistazo a WiX Tutorial, The Files Inside, para obtener una explicación detallada de las reglas de los componentes. Básicamente, dice que nunca se cambia el GUID de un componente, ya que eso significa orfanar el componente anterior y crear un nuevo componente.

+0

El enlace es útil, pero la respuesta no es muy útil para decidir qué leer allí (no todas las personas tienen mucho tiempo). Sugeriría, al menos, añadir una cita del artículo, algo así como * '[...], un componente solo debería contener elementos que pertenezcan juntos tan fuertemente que siempre tengan que instalarse o eliminarse juntos. Si esto significa un único archivo, sus componentes contendrán un solo archivo cada uno. Esto no solo es normal sino exactamente lo que se espera que hagas. No tenga miedo, Windows Installer puede manejar de manera eficiente miles de componentes o más, si es necesario. * * – Wolf

15

Nunca cambia el componente/@ Guid. Tampoco cambia nunca el conjunto de recursos (Archivo, Clave de registro, Acceso directo, Límite de línea, etc.) en el Componente. Cuando tiene un nuevo recurso, debe crear un nuevo componente con un nuevo @Guid. La parte realmente complicada es que el nuevo Componente no puede superponerse (piense en la ruta del archivo, o la ruta de la clave de registro, o typelib, etc.) con el Componente anterior.

Estas son básicamente las Reglas de componentes, visita: http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101.

+0

¿Tiene algún efecto la ubicación de la instalación del componente? – Rohit

+1

Sí y no. :) Si cambia el Componente/@ Directorio, entonces * no * tiene que cambiar el Componente/@ Guid, pero puede hacerlo si lo desea ... siempre y cuando no haya otros Recursos en el Componente (como las claves del Registro). Si hay otros recursos en el componente y usted cambia su Guid, entonces todos los recursos necesitan un nuevo nombre o ruta. La nueva ubicación se hará cargo de los archivos, por supuesto. No, las Reglas de componentes no son simples. –

+0

@RobMensching. ¿Qué pasa si usamos -ag opción con Heat? Como sabemos, hace que la generación de ComponentIds en el tiempo del enlace sobre la base del escenario definido por Glytzhkof en la respuesta anterior. –

Cuestiones relacionadas