質問

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.IsNetwor‌​kDeployed)
{
    isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications
}

データベースのようなより耐久性のあるストアにユーザー設定の永続バージョンを保存する必要があります。アプリケーションは、分離ストレージが使用可能であれば、それを使用することを決定できます。 (新しいバージョンのため)使用できない場合、アプリはデータベースから設定を取得し、それを使用して分離ストレージの設定を再初期化する必要があります。設定が変更された場合は、両方の場所を更新する必要があります。アプリの新しいバージョンがない限り、アプリはDBから設定を取得する必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top