假设我生成了我的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?
答案 0 :(得分:46)
Product/@Id="*"
随机生成一个新的GUID,足以用于产品代码。只要您的目标路径保持不变,Component/@Guid="*"
计算保持不变的GUID,这是遵守组件规则所必需的。
答案 1 :(得分:7)
产品ID(ProductCode)将安装程序包中的所有内容唯一标识为特定产品。当您搜索以查看是否安装了以前的版本时,将在升级代码上执行搜索。对于使用特定升级代码找到的所有项目,安装程序会将每个产品代码记录为同一产品的不同版本。因此,您可以说相同升级代码的不同产品代码标识不同的化身(如果您愿意,可以使用相同产品的版本)。
答案 2 :(得分:4)
如果您要将更新作为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}">
不维护静态升级代码将导致重复相同的安装。