WIX自动生成GUID *?

假设我生成了我的WIX XML文件,其产品ID为*。 另外,对于每个组件GUID,我使用*。

 

幕后是每次编译我的WIX安装程序时*旋转一个独特的GUID? 假设我的1.0.0版安装了一台机器。 然后我将我的WIX安装程序重新编译为1.0.1版。

当我去安装1.0.1时,WIX如何知道已经安装了1.0.0,因此将删除所有文件/注册表项并安装1.0.1?

我应该使用GUID中的*还是我的WIX XML配置中应该有唯一的ID / GUID?

Product/@Id="*"随机生成一个新的GUID,足以用于产品代码。 Component/@Guid="*" 计算 GUID,只要目标路径保持不变,GUID就会保持不变,这是遵守组件规则所必需的。

产品ID(ProductCode)将安装程序包中的所有内容唯一标识为特定产品。 当您搜索以查看是否安装了以前的版本时,将在升级代码上执行搜索。 对于使用特定升级代码找到的所有项目,安装程序会将每个产品代码都记录为同一产品的不同版本。 因此,您可以说相同升级代码的不同产品代码标识不同的化身(如果您愿意,可以使用相同产品的版本)。

这个快速指南可以帮助您。 请务必检查该文章中引用的MSDN链接,以便更好地了解其工作原理。

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

如果要将更新作为MSP(Microsoft术语中的小更新或次要升级)发布,请不要使用自动生成的GUID。 如果您只是要将更新作为MSI(主要升级)发布,则每次都需要更改产品代码,因此自动生成是正常的。 请参阅 – > http://msdn.microsoft.com/en-us/library/aa370579.aspx

其他版本与新版本的链接是升级代码。 假设您要使用升级function,则不应对同一产品进行更改。 否则,几乎每个版本都是不同的产品

这可能有点误导,但我确实有很多文件作为组件导入到新的WiX Product.wxs文件中。 我在使用Guid="*"创建了所有组件之后发现,在尝试构建安装程序时,WiX报告了每个组件的以下错误:

组件’AjaxControlToolkit.dll’有一个密钥文件,路径为’TARGETDIR \ ajaxcontroltoolkit.dll’。 由于此路径未植根于其中一个标准目录(如ProgramFilesFolder),因此该组件不符合自动生成guid的条件。

我使用以下PowerShell脚本为每个组件分配一个新的guid。 请注意,此脚本将直接修改Product.wxs文件,并应保留文件的备份以防出现问题:

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

您必须在product元素中为属性“UpgradeCode”设置一个值。 哪个必须是唯一的,并且必须保持相同的所有未来版本的设置。 升级代码负责允许安装升级或不升级,具体取决于正在执行的安装版本。

即: –

  

不维护静态升级代码将导致重复相同的安装。