msiインストーラで、アンインストール時にアプリが仕様しているデータファイルも全て削除したくて、System.Configuration.Install.Installerクラスを継承したカスタムのInstallerクラスを利用して、処理を実装しようとしたが、起動しない。
System.Configuration.Install.Installerはちゃんと継承してるし、System.ComponentModel.RunInstaller(true)も記述したし、何が違うのか…
ファイルの作成時に、ソリューションエクスプローラから、Add > NewItem > Classで作成したのだが、試しに、Add > Component > Installer Classで作成してみたら、なんと、ちゃんと動作した!
…何がいけないのか。最初に作ったファイルを良くみてみたら、結局、クラスのアクセスレベルの記述がなくて、デフォルトのinternalになっていたのが原因だったようだ。なので、クラスにpublic修飾子を記述したら、無事動作した。
1 2 3 4 5 6 7 8 9 10 11 12 |
[System.ComponentModel.RunInstaller(true)] //public!!! public class CustomInstaller : System.Configuration.Install.Installer { public override void Uninstall(IDictionary savedState) { base.Uninstall(savedState); //メッセージボックスを表示してテスト。 System.Windows.Forms.MessageBox.Show("Uninstall Test."); } } |
コメント