2011-09-07 114 views
1

我有一个很大的问题:更新安装:如何保存app.config?

我有一个旧的应用程序App1.0.exe。有了这个应用程序,有一个名为App1.0.exe.config的文件(应用程序配置)。现在我创建了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。所以,现在当我Debugg安装程序,我可以看到在我的习惯结束时有旧的配置.config_original和新的配置.config与旧配置的正确参数。但是,在我的自定义操作之后,安装将删除.config,只剩下.config_original。

我认为RemoveExistingProducts删除了未与更新包一起交付的所有文件。但是我不能提供.config,因为它覆盖原来的配置,并且所有的参数都丢失了。

我现在在这个问题上工作了3天,我真的需要你的帮助。我用尽了想法如何解决这个问题,玛比你们谁有类似的问题?

对不起,我的英语不好。 最好的问候

+0

为什么你需要保存旧的App.config?那里的值不应该以任何方式改变,因为你部署了V1,所以你应该很高兴知道那里有什么,因为用户改变的所有设置都保存在AppData下的user.config中...... – ChrFin

+0

为什么不呢?如果用户安装了v1,为什么他需要在与v1中设置相同的设置时配置v2?是的,我知道我不应该改变设置,这是一个巨大的错误:(但问题是:它发生了,现在我试图解决这个问题。问题是有一些其他程序的路径,例如,所以他们可以是不同的 – Manuel

回答

0

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

安装过程中没有重新编写配置,可以运行的是,应用程序在启动时测试配置是否为“版本1”格式。如果是这样,它将在那一刻执行更新。

这里有更新app.config的(旧的,但有效的)细节:http://geekswithblogs.net/akraus1/articles/64871.aspx

+0

这听起来不错,但我希望用新的安装程序解决这个问题。Maby我找到了一个解决方案,否则我会解决这个问题,谢谢 – Manuel

2

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

,详细了解自定义操作请参见:

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

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

+0

这个想法很好,但问题是:当我添加配置到输出它会覆盖新的配置,然后我可以保存旧的。如果我调用配置update.exe.config保存旧的并将更新重命名为exe.config:msi安装程序卸载旧的配置 – Manuel

+0

而不是重命名配置文件,你应该将它移动到另一个位置,例如Temp文件夹,并且确保在RemoveExistingProducts之前安排备份自定义动作 – Ciprian

+0

没问题,我保存旧的配置文件Appconfig.exe.con无花果重命名为Appconfig.exe.config_original比我重命名AppconfigUPDATE.exe.config到Appconfig.exe.config所以我有.exe.config和.exe.config_original。当我的自定义操作结束两个配置时,我可以看到它,当我调试安装。但在我的自定义操作后,Standart Action RemoveExistingProducts开始我想,并删除Appconfig.exe.config(新配置),因为我没有将新的安装提供给此Appconfig.exe.config文件。解决不了这个 – Manuel