WIX自动生成GUID *?

时间:2011-04-29 12:54:44

标签: c# wix guid

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

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

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

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

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

7 个答案:

答案 0 :(得分:46)

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

答案 1 :(得分:7)

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

答案 2 :(得分:4)

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

  

如果您要将更新作为MSP(小更新或次要升级)发布   Microsoft术语)不使用自动生成的GUID。如果你只是   您需要更改MSI(主要升级)的更新   每次都是产品代码,所以自动生成就好了。见 - &gt;   http://msdn.microsoft.com/en-us/library/aa370579.aspx

答案 3 :(得分:3)

This quick guideline可以帮到你。请务必检查该文章中引用的MSDN链接,以便更好地了解其工作原理。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

  

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

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

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

答案 6 :(得分:0)

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

即: -

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

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