更新安装:如何保存app.config?

时间:2011-09-07 13:41:02

标签: c# installation windows-installer orca

我有一个很大的问题:

我有一个旧应用程序App1.0.exe。使用此应用程序,有一个名为App1.0.exe.config的文件(App配置)。现在我使用新版本制作了2.0版,现在Appconfig中有不同的Appsettings。我的问题是:在进行更新安装时如何保存旧的Appconfig?

这个尝试解决问题的方法都失败了:

- 使用BeforeInstall事件读出旧配置,保存到上下文参数并在Afterinstall事件中写入新配置。 - BeforeInstall读出新配置(旧配置被删除)。 - 不要复制新的Appconfig,而是使用其他名称复制文件,例如包含新appconfig的AppConfigUpdate.config。在afterinstall事件中,我使用File.Move()保存旧的Config。现在有:

-Appconfig.exe.config_Original

-AppconfigUpdate.config

比我读出.config_Original并在AppConfigUpdate.config中写入参数并将其重命名为Appconfig.exe.config

我的问题是msi中有一个标准操作,在执行我的自定义操作后执行:RemoveExistingProducts。所以现在当我调试安装程序时,我可以看到在我的习惯结束时,旧配置.config_original和新配置.config以及旧配置中的右侧参数。但是在我的自定义操作之后,安装会删除.config并且只剩下.config_original。

我认为RemoveExistingProducts会删除未随更新包提供的所有文件。但是我无法传递.config,因为它覆盖了原始配置并且所有参数都丢失了。

我现在正在解决这个问题3天,我真的需要你的帮助。我没有想法如何解决这个问题,你们中的任何一个人都有类似的问题吗?

抱歉我的英语不好。 最好的问候

2 个答案:

答案 0 :(得分:2)

正确的方法是使用两个自定义操作来备份和恢复旧的配置文件。备份自定义操作将在RemoveExistingProducts操作之前执行。恢复自定义操作将在InstallFiles之后执行。一些简单的脚本自定义操作可以完成这项工作。

有关自定义操作的详细信息,请参阅:

http://msdn.microsoft.com/en-us/library/aa368066(VS.85).aspx

不幸的是,Visual Studio安装程序没有很好的调度支持自定义操作。您将不得不使用另一个免费或商业msi创作工具。

答案 1 :(得分:0)

也许可以解决安装程序的行为?

不是在安装期间重新编写配置,而是可以使您的应用程序在启动时测试 配置是否为“版本1”格式。如果是这样,它会在那时执行更新。

有关更新app.config的详细信息(旧的,但有效):http://geekswithblogs.net/akraus1/articles/64871.aspx