IsolatedStorage for Application Scope
.NET Framework 2.0で追加された、この新しい分離ストレージのスコープである"Application"は、どうやらClickOnceアプリケーション限定で使われるスコープらしい。従って、ClickOnceアプリケーションでは無い場合は、Applicationスコープの分離ストレージ自体使えないらしいのだが、この辺を解説したドキュメントが見つからないため、管理の仕方が全く解らない。
IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
ちなみに、この"ClickOnceアプリケーション限定"、というのは、正確には"一度でもClickOnceアプリケーションとして実行されたことがある"という意味らしい。というのも実際に試してみたのだが、ClickOnceアプリケーションのリポジトリであるWebサーバが起動されている必要もないし、以下のコードのように、ネットワークデプロイされているのを判定する必要も無い。
if ( ApplicationDeployment.IsNetworkDeployed )
ならば、"ClickOnceアプリケーション"と判定している基準は何なのだろう。答えははマニフェスト情報の有無だ。実際に試してみたが、ClickOnceアプリケーションはインストール/配布URLを設定すると、ビルド後に配置マニフェスト(.Application及び.Manifest)が生成されるが、このファイルが存在するかどうかで判定しているのである。ならば、このマニフェストが存在しているかどうかを判定する術はあるのか? と調べてみたが、これも試して解っただけのことだが、
if (AppDomain.CurrentDomain.ActivationContext != null) { /* ClickOnce アプリケーション(配置マニフェスト有) */ } else { /* 非ClickOnce アプリケーション(配置マニフェスト無) */ }
と判定できる。
ClickOnceであれば分離ストレージ、そうでなければローカルストレージを使う、等の使い分けに利用できそうだ。