StoreAdm

拙作のフレームワークでは、WindowsFormsにおけるFormの表示位置とサイズをいわゆる「分離ストレージ」上に保存し、次回のアプリケーション起動時に表示位置とサイズを復旧する、という処理を行っている。
分離ストレージには、保存の際のスコープ(Scope)という概念を持っており、それぞれユーザ、ドメイン、アセンブリのIDによりストアが分離されて管理される、ということは概念として判っていても、実際にファイルがどのように作られているかが、そのディレクトリの深さもあって非常に判りにくい。

例えばネットワークに接続可能なWindowsXPをインストールしたPCで、

IsolatedStorageFile store =
  IsolatedStorageFile.GetUserStoreForAssembly();

と、アセンブリスコープで分離ストレージを取得しにいくと、実際に対象となるパスは

:\Documents and Settings\\Local Settings\Application Data\IsolatedStorage\<なにやらハッシングされた文字列>\<なにやらハッシングされた文字列>\Url.<なにやらハッシングされた文字列>\<ファイル名>

という人間が辿り難いパスが対象となる。毎回パスを確認するのは面倒なので、分離ストレージに現在、どのようなデータがどのようなスコープで格納されているのを確認する術は無いのかと調べてみたら、ちゃんとあるのだった。

分離ストレージ ツール (Storeadm.exe)

コマンドラインから簡単に起動でき、例えば storeadm /LISTとすると、

Microsoft (R) .NET Framework Store Admin 2.0.50727.42
Copyright (c) Microsoft Corporation.  All rights reserved.

Record #1
[Domain]

file:///C:/hogehoge/bin/Debug/hoge.EXE


[Assembly]

file:///C:/hogehoge/bin/Debug/hoge.EXE


	Size : 4096

等と、表示される。[Domain][Assembly]とあるのは分離ストレージのスコープ、その下のXML片はアセンブリがロードされたURLだろう。(同じアセンブリでもロードされた場所が違うと、分離ストレージも違うはず) というか、このリストの詳しい見方の説明ってどこにあるのだろう。

なんでこのような話になったかというと、.NET Framework 2.0で分離ストレージのスコープが新たに追加されているからだ。

IsolatedStorageFile.GetUserStoreForApplication()

この新たに追加されたメソッドで、アプリケーションIDに対応する分離ストレージを取得できるらしいのだが、この場合のアプリケーションIDって何?