2011-09-07 163 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