2011-09-02 54 views
3

我有一個Win Form應用程序,它將一些用戶設置存儲在UserSettings.Settings文件中。到目前爲止,這一切運行良好,但是當我發佈更新時,似乎Settings文件會「重置」。我通過ClickOnce來完成。。在Win Form App中設置文件,最佳實踐

這是預期的行爲?
我可以控制設置文件中的字段是否被覆蓋?
有沒有更好的方法來存儲用戶設置?

謝謝

+0

我應該在其他地方存儲我的'.settings'文件嗎?任何關於如何完成的鏈接將不勝感激。 –

+0

你如何部署更新? ClickOnce的? – BrandonAGr

+0

@BrandonAGr:ClickOnce –

回答

2

你在哪裏保存.Settings文件?它可能不應該包含在您的可執行文件的安裝目錄中。嘗試將它移動到用戶的應用數據目錄:

http://blog.kowalczyk.info/article/Getting-user-specific-application-data-directory.html

祝你好運!

+0

我並沒有將它保存在任何地方,只是讓應用程序將它保存到任何地方...... :(我甚至覺得這很愚蠢,我沒有意識到我可以控制它的存儲位置 –

0

在Windows Vista/7的 它被保存到:

C:\Users\USERNAME\AppData\Local\MANUFACTURER_NAME\ 

C:\Users\USERNAME\AppData\Roaming\MANUFACTURER_NAME\ 

Im相當肯定它得到xp下保存到應用程序中的數據了。

由於新版本使用不同的文件夾,因此您的設置會一直重置。覈實。

4

當您發佈更新時,更新的應用程序應該調用ApplicationSettingsBase.Upgrade Method來移動以前版本的值。這裏有一個類似的問題:Automatically "upgrade" user settings from previous version of app.config file?

請記住,你應該調用上面的方法只有一次,所以你可能要保存您是否已經呼籲升級或者也不爲過的設置,做這樣的事情:

if(!Settings.Default.Upgraded) 
{ 
    Settings.Default.Upgrade(); 
    Settings.Default.Upgraded = true; 
    Settings.Default.Save(); 
} 

另一種可能的解決方案是將設置存儲在不依賴於應用程序版本的文件夾中。在這種情況下,您不會丟失值,並且不需要在版本之間升級設置。

+1

this是正確的答案;我幾乎要寫同樣的:) –

+0

只是要清楚;我使用'ClickOnce'部署或不這樣做。根據這裏和相關答案,我正在收集「ClickOnce」爲你做了這樣的事情,不是嗎? –

+0

這就是爲什麼我討厭賞金的問題....無論如何,這是適合我開始另一個線程的禮節,因爲這不能解決我的問題。即使使用'.Upgrade()'我的設置仍然會重置。我錯過了什麼? –

1

您是否簡單地使用帶有ClickOnce的Application Settings

如果是這樣,那麼你就必須將範圍設置爲用戶的配置編輯器和設置will be merged on upgrades as described here

正如ClickOnce應用程序的每個版本從所有 其他版本隔離,應用程序設置ClickOnce應用程序 也與其他版本的設置隔離。當您的 用戶升級到更高版本的應用程序時,應用程序 將最新(最高編號)版本的設置 與更新版本提供的設置進行比較,並將 設置合併到一組新設置文件中。