2011-04-29 17 views
25

Digamos que genero mi archivo WIX XML con un Id de producto de *. También para cada GUID de componente utilizo un *.WIX Autogenerate GUID *?

<Product Id="*" Name="xxx" Language="1033" Version="1.0.0.0" Manufacturer="xxx" UpgradeCode="xxx"> 

Detrás de las escenas es el * girar un GUID único cada vez que puedo compilar mi instalador WIX? Digamos que tengo la versión 1.0.0 instalada en una máquina. Luego recompilo mi instalador WIX a la versión 1.0.1.

Cuando voy a instalar 1.0.1, ¿cómo sabe WIX que 1.0.0 ya está instalado y por lo tanto eliminará todos los archivos/entradas de registro e instalará 1.0.1?

¿Debo utilizar * de GUID o debería tener un ID/GUID único en mi configuración de WIX XML?

+0

La documentación de WiX tendrá una respuesta clara y fácil de encontrar al respecto. ** Si no **, no debería mirar ese GUID (se llama indocumentado) – sehe

+1

¿Pero WIX crea un nuevo GUID para cada * cada vez que compilo? ¿Cómo enlaza ese GUID? – aherrick

+0

http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Auto-generated-vs-statically-assigned-GUIDs-td4670083.html – Isaiah4110

Respuesta

44

Product/@Id="\*" genera al azar un nuevo GUID, que es suficiente para los códigos de producto. Component/@Guid="\*"calcula un GUID que se mantiene igual siempre que su ruta de destino permanezca igual, lo cual es necesario para cumplir con las reglas de los componentes.

+1

gracias. Entonces, ¿qué significa eso para la generación automática de ID del producto? ¿Para qué se usa el GUID para la identificación del producto? En otras palabras, ¿cuáles son los pros/contras de generar una identificación de producto única cada compilación? – aherrick

+1

@aherrick Los códigos de los productos deben cambiar para utilizar las principales actualizaciones. Vea la respuesta de Yan para un enlace con detalles. –

+0

Entonces, si actualizo mi instalador de WIX de 1.0.0 a 2.0.0 (¿una actualización importante?) Y conservo mi ID de producto con un *, ¿qué significaría eso? Todavía no estoy seguro de que estoy llenando este grocking ... – aherrick

3

This quick guideline puede ayudarlo. Asegúrese de consultar los enlaces de MSDN a los que se hace referencia en ese artículo para comprender mejor cómo funciona.

1

Lo que vincula otras versiones a la nueva versión es el código de actualización. Eso no debería cambiar para el mismo producto suponiendo que desea utilizar la funcionalidad de actualización. De lo contrario, es casi como si cada versión fuera un producto diferente

+0

Bien, ¿entonces para qué sirve el GUID de ID de producto? Eso es lo principal en lo que todavía estoy confundido aquí. – aherrick

7

La identificación del producto (ProductCode) identifica de manera única todo en el paquete del instalador como un producto particular. Cuando busca ver si se instala una versión anterior, la búsqueda se realiza en el Código de actualización. Para todos los artículos encontrados con el código de actualización particular, el instalador observará cada uno de los códigos de producto como encarnaciones diferentes del mismo producto. Por lo tanto, puede decir que un código de producto diferente con el mismo código de actualización identifica diferentes encarnaciones (versiones si lo desea, del mismo producto).

+0

Entonces, ¿cuál es el beneficio/los problemas que vienen con tener una identificación de producto aleatoria generada en cada versículo de construcción manteniendo un GUID? Básicamente nada? – aherrick

2

De http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Auto-generated-vs-statically-assigned-GUIDs-td4670083.html:

Si usted quiere enviar actualizaciones como de MSP (Pequeña actualización o actualización menor en terminología de Microsoft) no utilizan GUID generados automáticamente. Si solo tiene enviando actualizaciones como MSI (actualizaciones principales), debe cambiar el código de producto todas las veces para que la generación automática sea correcta. Ver -> http://msdn.microsoft.com/en-us/library/aa370579.aspx

0

Esto puede ser un tanto equivocada pero que tenía una gran cantidad de archivos que estaba importando como componentes en un nuevo archivo de WiX Product.wxs. Descubrí después de haber creado todos los componentes con Guid="*" que cuando se trata de construir el instalador, WiX el siguiente error para cada componente:

El componente 'AjaxControlToolkit.dll' tiene un archivo de claves con la ruta 'TARGETDIR \ ajaxcontroltoolkit.dll '. Como esta ruta no está enraizada en uno de los directorios estándar (como ProgramFilesFolder), este componente no cumple los criterios para tener un guid generado automáticamente.

Utilicé el siguiente script de PowerShell para asignar un nuevo guid a cada componente.Tenga en cuenta que este script modificará el archivo Product.wxs directa y una copia de seguridad del archivo deben mantenerse en caso de que algo va mal:

(Get-Content Product.wxs) | 
Foreach-Object { $guid = [guid]::NewGuid().ToString(); $_ -replace 'Guid="\*"',"Guid=""$guid"""} | 
Out-File Product.wxs 
0

debe establecer un valor a la propiedad "UpgradeCode" en su elemento del producto. Que debe ser único y debe permanecer igual para todas sus compilaciones futuras para la configuración. El código de actualización es responsable de permitir que una instalación se actualice o no, según las versiones de instalación que se ejecutan.

es decir: -

<Product Id="*" Name="My Application" Language="1033" Version="1.1.0" Manufacturer="Myself :p" UpgradeCode="{561DA858-5398-4B87-8F3A-8B8BB12650F6}"> 

NO mantener un código de actualización estática tendrá como resultado la duplicación de instalaciones idénticas.