2014-04-05 89 views
0

我有一个VS2010安装程序项目用于创建.MSI文件。VS2010 - 创建MSI文件,如何版本纯文本文件?

在MSI文件中,我有一些配置文件,如myproduct.exe.config。该文件可能会或可能不会在版本之间更新。

从版本1.0.1过渡到1.0.2时,此文件已更新。

我有版本1.0.1和1.0.2存在的MSI文件。

要测试升级的正常工作,我做了以下内容:

  1. 从V1.0.1

  2. 安装MSI文件从V1.0.2安装MSI文件

我我注意到,在安装v1.0.1 MSI之后,我的文件myproduct.exe.config存在,因为它应该。但是,在运行要升级的v1.0.2 MSI文件时,该文件会消失。检查详细的Windows安装程序的日志文件我看到下面的消息:

MSI(一个或多个)(20:C8)[13:23:18:106]:文件:C:\ Program Files文件 (86)\ XXXX \ XXXX \ myproduct.exe.config;覆盖;不会修补;现有 文件是无版本的和未经修饰的 - 提供给 没有源文件哈希比较

我看了很多东西,相信这一切,因为我不能版本的纯文本配置文件。我期望的最终结果是这个更新的文件总是被安装并且永远不会被忽略。

任何人都可以提供指导吗?

+0

经过一些更多的日志检查后,我看到更新的myproduct.exe.config实际上已复制到位,但稍后删除,“MSI(s)(08: E0)[14:40:52:658]:执行op:FileRemov(,FileName = myproduct.exe.config ,, ComponentId = {xxxx})“ – Andrew

回答

0

我想我对MSI安装的一般行为有更多的阅读。目前,我通过将RemovePreviousVersions属性设置为false并将REINSTALLMODE属性设置为“amus”来克服了我的问题。

我能够观察,而RemovePreviousVersions属性为true,我的更新文件将被安装,然后在以后删除。禁用此属性纠正了这一点。

为了好的措施,我将REINSTALLMODE属性设置为amus,而不是默认的omus。关于REINSTALLMODE的更多细节可以在这里找到http://msdn.microsoft.com/en-us/library/aa371182(v=vs.85).aspx

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不允许您散列文件或使用随播广告。覆盖规则是,如果安装后文件已被更改,则不会被替换,假定用户已更改它。

0

我认为你正在寻找File Versioning Rules

非版本的文件是用户数据,如果修改日期晚于 在计算机上的文件创建日期,不要安装文件 因为用户定制将被删除。如果修改日期和创建日期相同,请安装该文件。如果创建日期晚于修改日期 ,则该文件被视为未修改, 安装该文件。

然后看看Companion Files。它会帮助你解决你的问题:)