ClickOnceおよびIsolatedStorage
-
03-07-2019 - |
質問
Winformアプリケーションは、イントラネットのClickOnceでリリースされます。 GUIの個人設定は分離ストレージに保存されます。すべてうまくいきます:)
問題は、アプリケーションの新しいバージョンを作成して公開すると、すべての設定が失われることです!ユーザーは各バージョンで設定を繰り返す必要があります。
バージョンではなく、アプリケーション全体の分離をフリーズする方法はありますか?
解決
ドメインスコープの分離ストレージではなく、アプリケーションスコープのストレージを使用する必要があります。これは、 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 がnullでないことを確認することです。
他のヒント
私はしばらく前にClickOnceアプリで作業していて、Environment.GetFolderPath(ApplicationData)を使用していました。すべての設定を保存するためのローミングアプリデータフォルダー。正常に動作し、多数の更新を生き延びました。アプリの名前またはCompanyName / AppNameなどで下位区分を作成し、そこにすべてを保存します。
他の回答の要約:
IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();//for visual studio
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications
}
データベースのようなより耐久性のあるストアにユーザー設定の永続バージョンを保存する必要があります。アプリケーションは、分離ストレージが使用可能であれば、それを使用することを決定できます。 (新しいバージョンのため)使用できない場合、アプリはデータベースから設定を取得し、それを使用して分離ストレージの設定を再初期化する必要があります。設定が変更された場合は、両方の場所を更新する必要があります。アプリの新しいバージョンがない限り、アプリはDBから設定を取得する必要はありません。