2007年11月1日木曜日

[.NET]アプリケーションセッティングとユーザセッティングの保存

WindowsFormアプリケーションでは、設定ファイルとして「アプリ名.config」というファイルを使用することが出来ます。
この設定はアプリ固有のものとユーザ固有のものと分けることが出来ます。

今回あるちょっとしたツールでiniファイルやレジストリ的にデータの保存がしたくてこの機能を利用してみました。このツールでは「アプリ名.config」に保存したいなぁと思い、以下のような実装をしました。
  • 該当のプロパティはアプリケーションスコープ
  • あるボタンを押下するとxxx.Properties.Settings.Default["YYY"]に値を設定
  • xxx.Properties.Settings.Default.Save()にて保存
しかし、いくらSave()を実行しても設定は保存できませんでした。調べてみるとアプリケーションスコープでは情報を保存できないとのことで、とりあえずユーザスコープに変更し、保存してみるとなんとなく保存できました。しかし、どこに保存されているかがわからず、またアプリケーションスコープに戻してみました。

ここでおかしな現象が発生しました。なぜか実行時にこのプロパティにアクセスすると例外が発生するようになりました。原因がさっぱりわからない。その後3時間くらい右往左往していて、たまたまExceptionのInnerExceptionを見ると何かおかしなパス(C:\Documents and Settings\matsuo\Local Settings\Application Data\インストール時に設定した会社名?)の書いてある例外が。。。そのパスを見るとそこにはユーザ設定らしいファイルが存在しました。

そのファイルを消すと元通り正しく動作するようにまりました。よく見ると過去に作ったアプリのフォルダも存在していました。
その後、プロジェクトのプロパティ「設定」画面の「同期」ボタンを押下することによりクリアできことがわかりました。

・・・挙動不信な例外が発生したら、まずマニュアルを。次に「InnerException」を。次にGoogleで。教訓になりました。

0 件のコメント: