Installation Wix主要升级

Installation Wix主要升级,installation,wix,windows-installer,Installation,Wix,Windows Installer,如何使用WIX防止在“主要升级”期间覆盖配置文件 我希望该文件在初次安装时安装,卸载时删除,在“主要升级”时保持不变 谢谢最直接的方法是在InstallExecute或InstallFinalize之后安排RemoveExistingProducts。这样,配置文件就不会被删除,然后再次安装(就像您在InstallInitialize之前安排的那样)。当然,如此晚地安排RemoveExistingProduct意味着您需要非常小心您的组件规则 我个人最喜欢的是将配置视为“用户数据”,而不是让in

如何使用WIX防止在“主要升级”期间覆盖配置文件

我希望该文件在初次安装时安装,卸载时删除,在“主要升级”时保持不变


谢谢

最直接的方法是在InstallExecute或InstallFinalize之后安排RemoveExistingProducts。这样,配置文件就不会被删除,然后再次安装(就像您在InstallInitialize之前安排的那样)。当然,如此晚地安排RemoveExistingProduct意味着您需要非常小心您的组件规则


我个人最喜欢的是将配置视为“用户数据”,而不是让installtouch来处理。应用程序附带默认值,但任何更改都由用户在其私人用户配置文件中进行。帮助您摆脱安装过程中无法很好解决的各种恶劣迁移问题。

您可以使用UPGRADINGPRODUCTCODE属性检查是否正在升级。我们使用此选项确定是否应运行“清理”自定义操作:

<Custom Action="" After="CleanUpFiles">
  <![CDATA[REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE]]>
</Custom>


我同意Rob的观点,因为配置是用户数据,存储在他们的AppData文件夹中,从未由MSI创建。相反,它被设置为一个默认值(我们将其作为默认配置存储在程序文件中),并由应用程序本身复制。但是如果用户想要卸载我们的产品,我们不想让这些东西弄乱他们的机器,所以我们制作了一个CleanUpFiles,在HD中搜索任何留下的垃圾。

你想让它被覆盖吗?如果不是在这种情况下,我会将配置文件分配给它们自己的组件,并将它们标记为永不覆盖。这样,升级不会覆盖该文件,但卸载会将其删除

e、 g



我正在使用此方法删除应在主要升级过程中保留的许可证数据和其他注册表信息。但是,对于磁盘上的配置文件,这些文件存储在用户配置文件中,因此如果用户确实卸载/重新安装,这些文件仍然会保留。@csexton不UPGRADINGPRODUCTCODE属性仅适用于您不希望在“卸载”上运行的自定义操作,但在用户配置文件的主要升级期间,“安装”上的自定义操作仍然会运行?+1,我们在路径中也使用了主要版本(例如%AppData%\Manufacturer\Product\1.0\…),这样我们就可以通过主要版本更改配置格式,并让用户选择天气来升级/迁移他们的配置。Rob你能解释一下你所说的小心组件规则是什么意思吗?@KevM我想现在你已经有了答案,但是为了回答这个问题,我在查看WiX 3.5的
MajorUpgrade
元素的调度选项时遇到了一个参考。
<Component Id="myComp" Guid="myguid" NeverOverwrite="yes">