c# - WIX Autogenerate GUID*?
(7)
Digamos que genero mi archivo WIX XML con un Id. De producto de *. También para cada componente GUID uso un *.
<Product Id="*" Name="xxx" Language="1033" Version="1.0.0.0" Manufacturer="xxx" UpgradeCode="xxx">
Detrás de escena, ¿está * girando un GUID único cada vez que compilo mi instalador WIX? Digamos que tengo instalada la versión 1.0.0 de una máquina. Luego vuelvo a compilar 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 y se instalará 1.0.1?
¿Debo usar * de GUID o debo tener un ID / GUID único en mi configuración de WIX XML?
De windows-installer-xml-wix-toolset.687559.n2.nabble.com/… :
Si desea enviar actualizaciones como MSP (actualización pequeña o actualización menor en la terminología de Microsoft) no utilice GUID generados automáticamente. Si solo va a enviar actualizaciones como MSI''s (Major Upgrades), debe cambiar el Código del producto cada vez que quiera que la generación automática esté bien. Consulte -> http://msdn.microsoft.com/en-us/library/aa370579.aspx
Debe establecer un valor para la propiedad "UpgradeCode" en su elemento de producto. Lo que debe ser único y debe seguir siendo el mismo para todas sus futuras compilaciones para la configuración. El código de actualización es responsable de permitir que las instalaciones se actualicen o no, según las versiones de configuración que se estén ejecutando.
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ático resultará en la duplicación de instalaciones idénticas.
El ID de producto (Código de producto) identifica de forma única todo lo que se encuentra en el paquete del instalador como un producto en particular. Cuando busque para ver si una versión anterior está instalada, la búsqueda se realiza en el Código de actualización. Para todos los elementos encontrados con el código de actualización en particular, el instalador anotará cada uno de los códigos de producto como diferentes encarnaciones del mismo producto. Por lo tanto, puede decir que un código de producto diferente del mismo código de actualización identifica diferentes encarnaciones (versiones, si lo desea, del mismo producto).
Esto puede ser un tanto erróneo, pero tenía muchos archivos que estaba importando como componentes en un nuevo archivo Product.wxs
WiX. Descubrí que después de haber creado todos los componentes con Guid="*"
al intentar construir el instalador, WiX informó el siguiente error para cada componente:
El componente ''AjaxControlToolkit.dll'' tiene un archivo de clave 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.
Usé el siguiente script de PowerShell para asignar un nuevo guid a cada componente. Tenga en cuenta que esta secuencia de comandos modificará el archivo Product.wxs
directamente y se debe mantener una copia de seguridad del archivo en caso de que algo salga mal:
(Get-Content Product.wxs) |
Foreach-Object { $guid = [guid]::NewGuid().ToString(); $_ -replace ''Guid="/*"'',"Guid=""$guid"""} |
Out-File Product.wxs
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.
Esta guía rápida puede ayudarle. Asegúrese de verificar los enlaces de MSDN a los que se hace referencia en ese artículo para comprender mejor cómo funciona.
Product/@Id="*"
genera aleatoriamente un nuevo GUID, que es suficiente para los códigos de producto. Component/@Guid="*"
calcula un GUID que permanece igual mientras la ruta de destino se mantenga igual, lo cual es necesario para cumplir con las reglas de los componentes.