WIX自动生成GUID *
本文关键字:GUID 自动生成 WIX | 更新日期: 2023-09-27 17:54:19
假设我生成了产品Id为*的WIX XML文件。另外,对于每个组件GUID,我使用*.
<Product Id="*" Name="xxx" Language="1033" Version="1.0.0.0" Manufacturer="xxx" UpgradeCode="xxx">
在幕后是*旋转一个唯一的GUID每次我编译我的WIX安装程序?假设我在一台机器上安装了1.0.0版本。然后我重新编译我的WIX安装程序到1.0.1版本。
当我去安装1.0.1时,WIX如何知道1.0.0已经安装,从而将删除所有文件/注册表项并安装1.0.1?
我应该使用*从GUID或我应该有一个唯一的ID/GUID在我的WIX XML配置?
Product/@Id="*"
随机生成一个新的GUID,该GUID足以用于产品代码。Component/@Guid="*"
计算一个GUID,只要你的目标路径保持不变,它就保持不变,这是遵守组件规则所必需的。
Product ID (ProductCode)唯一标识安装程序包中的所有内容作为特定产品。当您搜索查看是否安装了以前的版本时,将对升级代码执行搜索。对于带有特定升级代码的所有项目,安装程序将把每个产品代码标记为同一产品的不同版本。因此,您可以说相同升级代码的不同产品代码标识相同产品的不同化身(如果您愿意,可以是版本)。
From http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Auto-generated-vs-statically-assigned-GUIDs-td4670083.html:
如果您想将更新作为MSP的(小更新或小升级)在微软术语)不要使用自动生成的guid。如果你只是当你需要更改MSI(主要升级)时,你是否打算将更新发布无论如何,每次都要生成产品代码,所以自动生成是可以的。看到- - ->http://msdn.microsoft.com/en-us/library/aa370579.aspx
这个快速指南可以帮助您。为了更好地理解它是如何工作的,请务必查看文章中引用的MSDN链接。
连接其他版本到新版本的是升级码。假设您想要使用升级功能,对于相同的产品,这一点不应该改变。否则就好像每个版本都是不同的产品
这可能有点误导,但我确实有很多文件,我是作为组件导入到一个新的WiX Product.wxs
文件。在使用Guid="*"
创建了所有组件之后,我发现当尝试构建安装程序时,WiX为每个组件报告了以下错误:
组件'AjaxControlToolkit.dll'有一个路径'TARGETDIR' AjaxControlToolkit.dll'的密钥文件。因为这个路径不是根目录(比如ProgramFilesFolder),所以这个组件不符合自动生成向导的标准。
我使用下面的PowerShell脚本为每个组件分配一个新的guid。请注意,此脚本将直接修改Product.wxs
文件,并且应该保留该文件的备份,以防出现错误:
(Get-Content Product.wxs) |
Foreach-Object { $guid = [guid]::NewGuid().ToString(); $_ -replace 'Guid="'*"',"Guid=""$guid"""} |
Out-File Product.wxs
你必须在你的product元素中为属性"UpgradeCode"设置一个值。它必须是唯一的,并且必须在将来的所有构建中保持相同。升级代码负责让安装升级或不升级,这取决于正在执行的安装版本。
ie: -
<Product Id="*" Name="My Application" Language="1033" Version="1.1.0" Manufacturer="Myself :p" UpgradeCode="{561DA858-5398-4B87-8F3A-8B8BB12650F6}">
不维护静态升级代码将导致重复相同的安装。