マイクロソフトはインストーラーが何をしないといけないかちゃんと説明すべき

アプリケーションをつくって、誰かに使ってもらおうとするとインストーラーが必要になるわけだけど、世の中にはこれに関する情報が非常に少ない。
だからInstallShieldとかを使うわけだけど、やりたいことはアプリケーションを使ってもらいたいということであって、インストーラを作りたいわけじゃないのに、インストーラ作成ツールが一般的な開発環境よりも高いとか、どう考えても高すぎる。

で、wixとかを使うことになって、確かにちゃんと勉強すれば質の高いインストーラを作ることができるんだけど、ちょっと使ってもらいたい、というだけの用途にはどう考えてもオーバースペック。
じゃあ自分でつくろう、とか思うわけだけど、そうすると資料が全然たりなくて手探り状態。これでいいのかなぁとか、不安になりながら作ることになる。

Windows Installer はたしかに立派なもので、ちゃんとしたプロダクトを作って売るにはmsiを使用すべきというのはわからなくもないんだけど、ほとんどのデベロッパーにはバージョン間のファイルの共有とか、インストールのロールバックとか、修復インストールとか、そのへんはどうでもいい情報。(本当はどうでもいいとかいってちゃいけないのかもしれないけど気持ちとしてはどうでもいい。)
WixをつかってMSIをつくろうとすると、どうしてもそのへんの情報を正確に把握しとかなきゃいけないことになる。それなのに資料が全く足りない。書籍での資料はこれ The Definitive Guide to Windows Installer (Expert's Voice in Net) しかないし、http://msdn.microsoft.com/en-us/library/cc185688.aspx これもどうかと思う。マイクロソフトインストーラーの挙動を統一したいのならもっとちゃんと情報を出すべきだと思う。


個人的には(いろいろ試してみた結果)インストーラーは素の exe として作成するのが一番楽という結論に至った。
InstallShield で設定するにせよ、WixXML を書くにせよ、その記述で何が起こるのかを正確に把握しておかないとちゃんとしてものは作れないわけで、何が起こるのか正確に把握できるのなら、そういう動作をするコードを C++ でかくのも別に難しいことじゃない。

いきなり exe を実行させるのは怖いような気もするけど、msiにしたって、正確にユーザーに的確な(msiexecの)コマンドラインオプションを指定させることができるのでなければいわゆるブートストラッパーexeを提供するのはさけられないことだし、msi 自体に dll を埋め込んでカスタムアクションで何でもさせられるのだから、セキュリティ上なにかが違うわけでもない。

カスタムリソースにcabでも仕込んでそれを展開させるようにすることと、 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall あたりに正確な値を書きこむようにすることと、アンインストールを何とかすること、それらをちゃんと設計・実装するのと、WixなりInstallShieldなりに精通することとならば、前者のほうが楽だとしか思えない。
みんながみんなそう思うと、どんどんインストーラというものに統一性がなくなっていくわけだけど・・・