如何在“重大升级”期间使用 WIX 防止覆盖配置文件?
我希望在初始安装时安装该文件,在卸载时删除该文件,并在“主要升级”时保持不变。
谢谢
如何在“重大升级”期间使用 WIX 防止覆盖配置文件?
我希望在初始安装时安装该文件,在卸载时删除该文件,并在“主要升级”时保持不变。
谢谢
最直接的方法是在 InstallExecute 或 InstallFinalize 之后安排 RemoveExistingProducts。这样配置文件不会被删除然后再次安装(就像您在 InstallInitialize 之前安排的那样)。当然,这么晚安排 RemoveExistingProduct 意味着您需要非常小心您的组件规则。
我个人最喜欢的是将配置视为“用户数据”,而根本没有 installtouch 它。您随应用程序提供默认设置,但任何更改都由用户在其私人用户配置文件中进行。让您摆脱在设置过程中无法很好解决的各种令人讨厌的迁移问题。
你想要它被覆盖吗?如果不是这种情况,我将配置文件分配给它们自己的组件并将它们标记为Never Overwrite。这样升级不会覆盖文件,但卸载会删除它。
例如
<Component Id="myComp" Guid="myguid" NeverOverwrite="yes">
您可以使用 UPGRADINGPRODUCTCODE 属性来检查您是否正在升级。我们使用它来确定是否应该运行“清理”自定义操作:
<Custom Action="" After="CleanUpFiles">
<![CDATA[REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE]]>
</Custom>
我同意 Rob 的观点,因为配置是用户数据,存储在他们的 AppData 文件夹中,并且从未由 MSI 创建。相反,它被设置为默认值(我们将其作为默认配置存储在程序文件中),并由应用程序本身复制。但是如果用户想卸载我们的产品,我们不想让这些东西弄乱用户的机器,所以我们制作了一个 CleanUpFiles 来搜索 HD 以查找任何遗留的垃圾。