我有一个VS2010安装程序项目,用于创建.MSI文件。
在MSI文件中,我有一些配置文件,例如myproduct.exe.config。此文件可能会也可能不会在版本之间进行更新。
从版本1.0.1过渡到1.0.2时,此文件已更新。
我有版本1.0.1和1.0.2的MSI文件。
要测试升级是否正常,请执行以下操作:
从v1.0.1安装MSI文件
从v1.0.2安装MSI文件
我注意到的是,在安装v1.0.1 MSI后,我的文件myproduct.exe.config应该存在。但是,在运行v1.0.2 MSI文件进行升级时,文件将消失。检查详细的Windows安装程序日志文件我看到以下消息:
MSI(s)(20:C8)[13:23:18:106]:文件:C:\ Program Files (86)\ XXXX \ XXXX \ myproduct.exe.config;覆盖;不会补丁;现有 文件是未版本化和未修改的 - 没有提供源文件哈希 比较
我已阅读了很多内容,并且相信这种情况正在发生,因为我无法对此纯文本配置文件进行版本控制。我期望的最终结果是始终安装此更新文件,并且永远不会遗漏。
任何人都可以提供指导吗?
答案 0 :(得分:0)
我认为我对一般的MSI安装行为有更多的阅读。暂时我通过将RemovePreviousVersions属性设置为false并将REINSTALLMODE属性设置为" amus"来克服我的问题。
当RemovePreviousVersions属性为true时,我能够观察到,我的更新文件将被安装,然后在以后删除。禁用此属性会更正。
为了好的措施,我将REINSTALLMODE属性设置为amus,而不是默认的omus。有关REINSTALLMODE的更多详细信息,请访问http://msdn.microsoft.com/en-us/library/aa371182(v=vs.85).aspx
答案 1 :(得分:0)
VS设置中的RemovePreviousVersions应该可以正常工作。这是一个很好的起点:
https://www.simple-talk.com/dotnet/visual-studio/updates-to-setup-projects/
除了必须将文件版本增加到更新文件之外,它仍然是相关的,因为升级现在已经结束,并且文件覆盖规则适用。另一个问题是VS升级破了,看到这个修复:
http://support.microsoft.com/kb/2418919/en-us
这可能是你看到的问题。您不需要任何REINSTALLMODE东西来使例程VS RemovePreviousVersions正常工作。
您在VS升级中无法控制数据文件,因为VS不允许您对文件进行哈希处理或使用协同服务器。覆盖规则是如果文件在安装后被更改,那么它将不会被替换,假设用户已经更改了它。
答案 2 :(得分:0)
我认为您正在寻找File Versioning Rules
非版权化文件是用户数据 - 如果修改日期晚于 在计算机上创建文件的日期,不要安装该文件 因为用户自定义将被删除。如果修改和 创建日期是相同的,安装文件。如果创建日期是 在修改日期之后,该文件被视为未修改, 安装文件。
并查看Companion Files。它将帮助您解决问题:)