2011-04-29 91 views
25

比方说,我生成我的WIX XML文件,产品ID为*。也为每个组件GUID我使用*。WIX自动生成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?

+0

WiX文档将对此有一个清晰且容易找到的答案。 **如果它不**,你不应该看那个GUID(它被称为无证) – sehe 2011-04-29 12:59:50

+1

但是每次编译时,WIX是否为每个*创建一个新的GUID?它如何链接该GUID? – aherrick 2011-04-29 14:26:41

+0

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

回答

44

Product/@Id="\*"随机生成一个新的GUID,这对于产品代码来说已经足够了。 Component/@Guid="\*"计算只要目标路径保持不变,遵守组件规则就必须保持相同的GUID。

+1

非常感谢。那么产品ID自动生成的含义是什么?用于产品ID的GUID是什么?换句话说,每次构建生成唯一的产品ID有哪些优点/缺点? – aherrick 2011-04-29 18:05:36

+1

@aherrick产品代码必须更改为使用主要升级。查看Yan的答案,了解详情的链接。 – 2011-04-29 18:52:15

+0

因此,如果我将我的WIX安装程序从1.0.0版本升级到2.0.0(主要升级?),并将我的产品ID保留为*,那么这意味着什么?仍然不知道我满意这个... – aherrick 2011-04-30 10:18:51

3

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

1

其他版本与新版本链接的是升级代码。假设您想要使用升级功能,对于相同的产品,这应该不会改变。否则,它几乎就像每个版本是不同的产品

+0

非常感谢,那么产品ID GUID的用途是什么?这是我仍然在这里困惑的主要事情。 – aherrick 2011-05-03 13:29:59

7

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

+0

那么,在每个版本上生成随机产品ID并保留一个GUID会带来哪些好处/问题?基本上没有? – aherrick 2011-05-03 16:36:26

0

这可能是有点误导,但我确实有很多文件,我作为进口组件集成到一个新的WiX Product.wxs文件。我发现我已经创建了Guid="*"所有组件后试图建立安装程序时,维克斯报告每个组件以下错误:

组件“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 
0

您必须在您的产品元素的值属性“的UpgradeCode”。它必须是唯一的,并且对于未来的所有版本,必须保持不变。升级代码负责安装升级或不升级,具体取决于正在执行的安装程序版本。

即: -

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

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