Wix主要升级删除未版本文件

Wix主要升级删除未版本文件,wix,windows-installer,Wix,Windows Installer,我的应用程序有一个版本文件和许多未版本文件。我想描述我期望的默认行为,但我没有看到这种行为 基本上,未修改的文件应该被替换,而修改的文件应该被保留 从日志中可以看出,安装阶段正按照我的预期进行。我的所有未版本化文件均未被修改。对于每个文件,我都会收到一条消息,说明覆盖;不会修补(如果哈希不同)或不会覆盖;不会修补(如果哈希相同) 但是,当删除阶段运行时(安装完成后在默认位置运行),它会删除所有未版本化的文件 我唯一的猜测可能是因为文件在每个包中都有不同的GUID,但我认为我可以在每次创建安装程序

我的应用程序有一个版本文件和许多未版本文件。我想描述我期望的默认行为,但我没有看到这种行为

基本上,未修改的文件应该被替换,而修改的文件应该被保留

从日志中可以看出,安装阶段正按照我的预期进行。我的所有未版本化文件均未被修改。对于每个文件,我都会收到一条消息,说明
覆盖;不会修补
(如果哈希不同)或不会覆盖;不会修补(如果哈希相同)

但是,当删除阶段运行时(安装完成后在默认位置运行),它会删除所有未版本化的文件

我唯一的猜测可能是因为文件在每个包中都有不同的GUID,但我认为我可以在每次创建安装程序时重新生成文件GUID

我意识到我可以将删除阶段更改为在安装之前进行,但是如果升级失败,我希望应用程序保持原位,因此我希望避免这种行为


我能做些什么来阻止卸载阶段删除我的文件吗?

经过一番周折后,我终于明白了。事实证明,将
-gg
标志提供给
heat.exe
,这将在heat运行时生成GUID(一个随机GUID),并将
-ag
标志传递给
heat.exe
,这将在
heat
运行时将GUID设置为
*
,以便生成GUID(一致)当
candle
运行时


如果我将
-ag
传递给
heat.exe
,那么我就得到了一致的guid,并且升级行为正确。

经过一段时间的反复思考后,我找到了它。事实证明,将
-gg
标志提供给
heat.exe
,这将在heat运行时生成GUID(一个随机GUID),并将
-ag
标志传递给
heat.exe
,这将在
heat
运行时将GUID设置为
*
,以便生成GUID(一致)当
candle
运行时


如果我将
-ag
传递给
heat.exe
,那么我将获得一致的GUID,并且升级行为正确。

是的,如果要防止升级问题,组件GUID必须在新旧设置之间匹配。是的,如果要防止升级问题,组件GUID必须在新旧设置之间匹配。虽然尚未完成,但我尝试在此处总结使用MSI文件时出现的一些常见开发人员陷阱:。虽然尚未完成,但我尝试在此处总结使用MSI文件时出现的一些常见开发人员陷阱:。