トップ回答者
MSIのネストインストール

質問
-
こんにちは、ten10と申します。
今、子インスーラを起動するsetupをIntsallShield2008で作っています。
IntsallShield2008のヘルプに、
「WindowsInstallerではネストインストールの使用を避けるようにしてください。」
との記述があり、カスタムアクションでmsiexec.exeを起動する代替方法が提示されていました。
その中で、msiexec.exeを起動するカスタムアクションはUIシーケンスに配置する必要があるため
サイレントインストールができないともありました。上記にしたがってインストールとアンインストールのカスタムアクションを作り
setupを動かすとインストールはできました。しかし、「プログラムの追加と削除」から[削除]ボタンを押すと
子のアンインストールがされません。(サイレントモードでアンインストールされてる?)ちなみに[変更]ボタンからセットアップのダイアログから削除すると子もアンインストールされます。
さて、最も簡単な解決策としては[削除]ボタンを非表示にすればいいのかもしれませんが、
できれば[変更]ボタンではなく[変更と削除]ボタンと表現したいところです。この問題について、なにかスマートな解決案はないでしょうか?
以上
回答
-
とっちゃん さま、アドバイスありがとうございます。
子インストーラは外部から提供されているので、どうしようもありません。
インストールシーケンスでmsiexecを2重呼び出しできないのは、
現状では解決策がないということですね。とりあえず対処療法ですが、[削除]ボタンを無効にする方向で...
追記:
>できれば[変更]ボタンではなく[変更と削除]ボタンと表現したいところです。
ARPSYSTEMCOMPONENTを1にして、WindowsInstallerのプログラムを
「プログラムの追加と削除」に表示されないようにして、
独自アンインストーラーのレジストリエントリを作ると、
[変更と削除]ボタンが表示されるようになりました。
以上
すべての返信
-
いちばん手がかからず、かつ全体的にはスマートと言えるのは、インストールセットを分解しないことですね。
子インストーラに当たるものがシステムコンポーネントであるのなら、マージモジュールに組み替えてしまえば、ネストの指定よりもずっと手軽に構築できます。
逆に、複数の製品を並列的に扱いたい(VSや、Office2007のような構成)のであれば、自前の setup.exe を使って逐次処理をするというのがいちばんスマートではないか?という気がします。
こちらは結果(エンドユーザーに対して)はスマートになりますが、作成の手間は格段に増えます。
UIの作成もですし、シーケンス管理やカスタムインストールが絡めばそれらも全てフォローアップする必要が出ます。
とくに、必要サイズの計算などは、かなり厳しい状況が起こりえますので、単純にはいきません。
#作ってしまえば、以後使い回しができるので、さまざまなメリットはあるでしょうけど
上記はいずれも結果をスマートにしたいという前提です。
その辺多少だめでもいい(見た目的に...)のなら、DLLのCustomAction(WindowsInstallerDLLで、番号が1になるものである必要あり)を用意し、その中で、UIシーケンスからの呼び出しと同じ呼び出しを行うものを作ります。
それを、InstallExecuteSequence の最後で呼び出すことで、削除させるという方法もあります。
ただし、インストールとアンインストールで順番が変わってしまうこと、子インストーラが追加と削除に出る場合はそれが消えないこと、インストール構成によっては、WindowsInstaller が管理しているいくつかの情報がうまく消えない場合があることなどがあります。
そのため、作成の手間はそれほどではありませんが、スマートではありません。
あとは、時間が許すのなら(リリースが2009年以降になるw)、WindowsInstaller 4.5 がリリースされるのを待つというのもありますよ。
こちらは、現在 2008/Q2 には出したいと、頑張っているそうですが(WindowsInstaller Team のBlogに出てました)、まだ伸びるかもしれないので、わかりません。
また、当然ですが、作成ツールの対応が必要になるので、InstallShield 2008 ではなく、それ以降のいずれかのバージョン(2009あるいは、2010)になるという可能性は高いでしょうね。
蛇足ですが...InstallShield 関係であれば、ここよりは、http://groups.yahoo.co.jp/group/is-user/ のほうがいいかと思います。
#このネタそのものはここで続けてもらっても何ら問題はないと思いますが、あまり多くの回答は期待できないでしょうね。製品どころかメーカーからして異なりますので
-
とっちゃん さま、アドバイスありがとうございます。
子インストーラは外部から提供されているので、どうしようもありません。
インストールシーケンスでmsiexecを2重呼び出しできないのは、
現状では解決策がないということですね。とりあえず対処療法ですが、[削除]ボタンを無効にする方向で...
追記:
>できれば[変更]ボタンではなく[変更と削除]ボタンと表現したいところです。
ARPSYSTEMCOMPONENTを1にして、WindowsInstallerのプログラムを
「プログラムの追加と削除」に表示されないようにして、
独自アンインストーラーのレジストリエントリを作ると、
[変更と削除]ボタンが表示されるようになりました。
以上