2013-05-26 66 views
2

我注意到如果您將該應用程序的.exe文件移動到另一個位置,用戶設置將重置。移動應用程序時重置用戶設置

根據我的理解,這是因爲應用程序數據文件夾中的位置也是基於.exe的路徑,當生成散列時會考慮這一點。

我知道有不同的選擇,無論是通過使用註冊表或通過手動創建自定義配置文件,但我的問題是,是否有可能保留用戶設置時應用程序(.exe)被移動到另一個位置使用Microsoft提供的默認功能?

對於我的測試,我使用獨立的應用程序(僅一個.exe文件)。簡單地將文件移動到(/Desktop/)會導致在C:\Users\<user>\AppData\Local\<company>\Appname_Url_<hash>下生成一個新文件夾,其中包含默認的user.config。舊的user.config仍然可用,因此如果您將.exe文件移回其先前的位置,則會再次加載先前的設置。這變得很麻煩,不僅因爲你失去了設置,而且如果你在10個不同的位置移動文件10次,你最終會在appdata中創建10個新文件夾。

+0

可能更適合http://superuser.com。當然,除非你的應用程序是你自己編寫的應用程序。 –

+0

當然是,畢竟這是一個編程相關的網站。所以這個問題與我正在寫的軟件有關。因此,C#/ winforms標籤:) – coolmine

+1

你只移動exe文件或所有文件夾?我認爲,如果你移動所有文件夾,它應該保持不變 – Mzf

回答

2

這實際上是一個安全功能,與組件部署和clickonce相關。 我認爲你只需要在主程序集中添加一個強名稱來解決這個問題。

如果沒有一個強大的名字,這個名字會是這樣的,如果應用程序的路徑變化(參見網址令牌),它將改變:

%appdata%\WindowsFormsApplication1\WindowsFormsApplication1._Url_3pei3cdnq3srqpjiwh1qnf12ncsp5c2w\1.0.0.0\user.config 

如果你有一個強大的名字它會是這樣的,它不會改變,因爲你的應用程序原點現在確定的,無論其當前位置(參見強名稱標記):

%appdata%\WindowsFormsApplication1\WindowsFormsApplication1._StrongName_fe0ndyau2vlgeac4gmbg13u3q4jtyrqv\1.0.0.0\user.config 
+0

這實際上是一個了不起的解決方案。目前爲止我讀過的所有帖子中都沒有提到它,實際上它沒有任何進一步的修改。謝謝。 – coolmine

0

this blog post,關於配置文件的位置:

如果您需要將設置在不同的位置存儲一些 原因,推薦的方法是寫自己的SettingsProvider。

這告訴我,用一點代碼,你可能會將文件存儲在你想要的位置,並且它不會移動。

+0

這絕對是可能的,但是如何重用當前的Visual Studio IDE設置編輯器和生成的關聯類呢?即使你編寫了一個自定義的SettingsProvider,你仍然需要重寫很多代碼來支持它。 –

+0

它確實有效,這實際上是我的第一種方法,但問題始於您開始在設置中使用不同類的時候。作爲一個例子,http://stackoverflow.com/a/11398536/1630928患有點/大小類,我相信它可能有一些問題,我還沒有測試過。所以我假設你需要編寫相當多的代碼,並進行相當多的測試,以確保默認功能在那裏,即使如此,總是有你無法預測的東西:) – coolmine