ゴミ箱.net

汚物は消毒

.NETアプリの設定ファイルのパスを固定化するウルテク

.NET Frameworkでアプリケーションを作ると、アプリケーション設定を扱うのがアホみたいに楽になる。
テキストボックスなどにバインドするだけで勝手に設定値と表示が連動するし、Properties.Settings.Default.○○という設定値用の変数が自動で生成されるのでプログラムからの取得・設定が簡単にできる。

そんなアプリケーション設定だが、ファイルシステム上のどこに値が保存されるのかが動かすまで分からないという致命的な欠点がある。どうやらEXEファイルの絶対パスから求めたハッシュ値によってパスが決定されるらしい。
これのせいで、アンインストールするときに自動で削除するということができないのだ。

だが、我らが偉大なゲイツ神はそういうときのための対処法を用意してくださっていた。


それは、「アセンブリに署名する」というものだ。

Visual Studioを開いて、プロジェクト設定の「署名」を選んで署名ファイルを新規作成すればおk。
ゲイツ神はStandard以上を買えなどというせこいことはお求めにならない。Expressでもちゃんと署名できる。
作成したファイルはプロジェクトフォルダに配置される。
署名にパスワードを設定することもできるが、この場合はべつにしなくてもいい。

たったこれだけでアプリケーション設定ファイルのパスが固定されるのだ。
厳密には、パスが署名から求めたハッシュにより決定されるようになるので、EXEファイルがどこにインストールしたかによって変化することがなくなるというべきか。
署名が変わらない限り、EXEのバージョンアップにも耐性がある。

いちどローカル環境でアプリケーション設定を保存すれば、署名から求めたハッシュが分かり、つまり設定が保存されるパスが分かる。
アンインストール時の処理にそのパスのファイルを消す処理を入れておけば、立つ鳥跡を濁さない高品質アプリを.NET Frameworkで作ることができる。

スポンサーサイト

PageTop

コメント


管理者にだけ表示を許可する