2008-10-14 43 views
9

Winform應用程序在我們的Intranet中使用ClickOnce發佈。我們將GUI的個人偏好存儲在獨立存儲中。所有的作品都很好:)ClickOnce和IsolatedStorage

問題是,當我們有一個新版本的應用程序,我們發佈......所有的偏好都丟失了!用戶需要反覆設置每個版本的偏好。

有沒有辦法凍結整個應用程序而不是版本的隔離?

回答

17

您需要使用應用程序作用域,而不是作用域隔離存儲。這可以通過使用IsolatedStorageFileStream的重載的構造函數之一來完成。

例子:

using System.IO; 
using System.IO.IsolatedStorage; 
... 

IsolatedStorageFile appScope = IsolatedStorageFile.GetUserStoreForApplication();  
using(IsolatedStorageFileStream fs = new IsolatedStorageFileStream("data.dat", FileMode.OpenOrCreate, appScope)) 
{ 
... 

不過,現在你會遇到這樣的代碼只工作時,應用程序已經通過ClickOnce的推出,因爲這是唯一的一次應用範圍的獨立存儲可用的問題。如果您不通過ClickOnce啓動(例如通過Visual Studio),則GetUserStoreForApplication()將引發異常。

的辦法解決這個問題是確保AppDomain.CurrentDomain.ActivationContext是不是想使用的應用範圍的獨立存儲之前空。

1

您必須將永久版本的用戶設置存儲在更耐用的商店(如數據庫)中。如果可用,您的應用程序可以決定使用隔離存儲。如果它不可用(由於更新版本),應用程序應從數據庫中獲取設置並使用它重新初始化獨立存儲中的設置。如果設置更改,則應更新這兩個位置。除非有更新版本的應用程序,否則您的應用程序不必從數據庫中獲取設置。

+0

這是心肌梗死最初的想法,但如果他們周圍的工作我很想知道:P – 2008-10-14 22:32:54

+0

你可以存儲的設置文件中的特定位置上用戶的硬盤驅動器,但你將不得不使這個應用程序完全信任.. – 2008-10-14 23:08:01

4

我前段時間在使用ClickOnce應用程序,並使用了Environment.GetFolderPath(ApplicationData) - 例如,漫遊應用程序數據文件夾,以存儲所有設置。工作很好,並倖存了許多更新。只需創建一個名稱爲您的應用程序或CompanyName/AppName或其他名稱的子目錄,並將所有內容存儲在該目錄中。

0

從其他的答案摘要:

IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();//for visual studio 
if (System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed) 
{ 
    isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications 
}