Installerクラスをデバッグする

死んでました。やっと復活。

なんでデバッグする必要が

これは、Configurationのシリアライズが、想像通りにいかなかったから。はじめは素直に Properties.Settings.Default.Save() で期待通りの動作をせず、ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal) でも予想外の動作、何でだろうってことで。

デバッガを起動させる

インストーラクラスってデバッグできへんの?みたいなFAQがMSのサイトにあったので、内容を見てみると

  • System.Diagnostics.Debugger.Launch 使う。
  • MessageBoxデバッグしてみたら。
  • インストーラ ツール (Installutil.exe)使うと良いよ。

まあ、MessageBoxデバッグは、printfデバッグと一緒でまあ、そうとして、デバッガを起動して、プロセスにアタッチっていう方法があったのね。
オーバーライドしたInstallメソッドの先頭で

System.Diagnostics.Debugger.Launch();

してやると無事にデバッガ起動*1

で、実際デバッグしてわかったことは、msiexec.exe からアセンブリが起動されているから、設定ファイルのパスは

アプリケーションデータ\Microsoft_Corporation\DefaultDomain_Path_hogehoge\version\user.config

ってなるってこと。あー。と

実際場所を見てみると、ばっちりSetupプロジェクトのユーザーインターフェイスから入力したデータが、無事にシリアライズされていましたとさ。
かなり以前に作成したセットアップは、実行されているアセンブリのパスに、XMLとしてパースし、App.configを書き換えていたので*2、今回はお作法通りConfigurationでと思ったのが運のつきで、結局 Google 先生に再度お伺いを立てることに。

結局問題は未解決となりました。

*1:何回もデバッグするなら、最後に InstallException を発生させるとインストールに失敗するので楽かも

*2:.Net 2.0 以前