StoreAdm
拙作のフレームワークでは、WindowsFormsにおけるFormの表示位置とサイズをいわゆる「分離ストレージ」上に保存し、次回のアプリケーション起動時に表示位置とサイズを復旧する、という処理を行っている。
分離ストレージには、保存の際のスコープ(Scope)という概念を持っており、それぞれユーザ、ドメイン、アセンブリのIDによりストアが分離されて管理される、ということは概念として判っていても、実際にファイルがどのように作られているかが、そのディレクトリの深さもあって非常に判りにくい。
例えばネットワークに接続可能なWindowsXPをインストールしたPCで、
IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForAssembly();
と、アセンブリスコープで分離ストレージを取得しにいくと、実際に対象となるパスは
:\Documents and Settings\ \Local Settings\Application Data\IsolatedStorage\<なにやらハッシングされた文字列>\<なにやらハッシングされた文字列>\Url.<なにやらハッシングされた文字列>\<ファイル名>
という人間が辿り難いパスが対象となる。毎回パスを確認するのは面倒なので、分離ストレージに現在、どのようなデータがどのようなスコープで格納されているのを確認する術は無いのかと調べてみたら、ちゃんとあるのだった。
コマンドラインから簡単に起動でき、例えば storeadm /LISTとすると、
Microsoft (R) .NET Framework Store Admin 2.0.50727.42 Copyright (c) Microsoft Corporation. All rights reserved. Record #1 [Domain][Assembly] file:///C:/hogehoge/bin/Debug/hoge.EXE Size : 4096 file:///C:/hogehoge/bin/Debug/hoge.EXE
等と、表示される。[Domain][Assembly]とあるのは分離ストレージのスコープ、その下のXML片はアセンブリがロードされたURLだろう。(同じアセンブリでもロードされた場所が違うと、分離ストレージも違うはず) というか、このリストの詳しい見方の説明ってどこにあるのだろう。
なんでこのような話になったかというと、.NET Framework 2.0で分離ストレージのスコープが新たに追加されているからだ。
IsolatedStorageFile.GetUserStoreForApplication()
この新たに追加されたメソッドで、アプリケーションIDに対応する分離ストレージを取得できるらしいのだが、この場合のアプリケーションIDって何?