我有一个我继承的WiX安装程序,它有自动生成的产品代码,固定的升级代码,自动生成的组件GUID,我们总是强制进行重大升级。其中一个配置文件在安装时由自定义操作修改,稍后可能会被用户修改。它在安装程序的现有(已发布)版本中未标记为NeverOverwrite。
我希望MSI文件版本控制规则能够防止修改后的文件在升级时被替换,但实际上它仍然会被替换。我在安装日志中找到了初始InstallValidate的这个条目:
MSI (s) (7C:00) [12:18:07:604]: Component: conf.xml; Installed: Absent; Request: Local; Action: Local
我认为这是我问题的根源,因为组件(其中包含文件作为密钥路径)实际上就在那里,即使它显示为缺席。
稍后,当安排RemoveExistingProducts时,旧安装程序会正确检测到该组件:
MSI (s) (7C:74) [12:18:09:901]: Component: conf.xml; Installed: Local; Request: Absent; Action: Absent
然后删除。显然我可以创建一个自定义操作来备份文件并在升级过程中恢复它,但是当我不明白为什么它没有被检测到时,这似乎是一个黑客。
在这两种情况下,文件路径似乎都是正确的,据我所知,组件GUID也应该为两个安装生成相同的内容。是否还有一些我可以启用的日志记录,或者我错过了一些明显的东西?