- - PR -
同一のwidows端末上にmsiパッケージを複数インストール
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-24 01:50
はじめて書き込み致します。
現在、visual studio 2005 のセットアッププロジェクトを利用して インストーラの作成を行っています。 同一のwidows端末上にmsiパッケージを複数インストールすることが可能かどうか 調査しております。 msi作成時に[ProductCode]が一意に設定されるため、 インストーラ起動時に動的にこのプロパティを再設定できる仕組みがあれば… と思ったのですが実装方法がわかりません。 ご存知の方がいらっしゃいましたらご教示いただけないでしょうか。 よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2006-05-24 09:35
可能だとは思いますが、インストーラによっては実行の結果、システムをリブートさせるものもあるのでなかなか制御が大変だと思います。
どうしてそんなことをする必要があるんでしょうか? 「複数の msi」の間に、何か特別な関係でもあるのでしょうか? | ||||||||||||||||
|
投稿日時: 2006-05-24 11:29
同じパッケージ(ProductCodeの同じもの)を複数というのは出来ません。必ず一つだけになります。
ProductCode の値は、ビルド後に変更してはいけません。 ProductCode は日本語では製品コードとも呼ばれる非常に重要な値です。 要するに、Windowsが製品としてのmsiを識別するためのユニーク識別子となるわけですので おいそれと勝手に変えてしまうわけには行きません。 お使いのインストーラ作成ツールのヘルプに「絶対」に出ていますので、よくお読みください。 なんとなく思っただけなのではずしてるかもしれませんが、 ソリューションごとに msi を作っているということではありませんか? もし、そうならmsiは配布する製品全体で一つのものにすればOKです。 プライマリのアプリケーションのソリューションに統一してもいいですし、 専用にソリューションを作ってもいいでしょう(VSセットアップであれば)。 _________________ // とっちゃん(高萩 俊行)@わんくま同盟 // とっちゃん’Blog // MS-MVP for Developer Tools - Visual C++ // WindowsInstallerの話題はhttp://www.freeml.com/msiまで | ||||||||||||||||
|
投稿日時: 2006-05-25 01:18
ひどりさん
とっちゃんさん ご回答ありがとうございます。 まず背景として、 アプリケーションのバージョンアップに伴い installshieldからvsへインストーラの 移行を担当することになりました。 このアプリケーションは ネットワークを介して他の端末のフォルダを監視・処理する機能を持っています。 1つのアプリケーションに対し1つの端末を監視しているため 複数の端末を監視するために、複数インストールする必要があります。 msiパッケージは一度インストールした状態で 再度、インストールしようとするとアプリの"修復"か"削除"を選択する ダイアログが表示されます。 このダイアログを表示させずに、2つ目、3つ目とインストールが できればと考えています。 また仮に複数インストールできたとしても [productcode]単位でインストール状態を判別していそうなので どれか一つをアンインストールしたら全て削除されてしまうことを危惧して インストール毎にproductcodeを変更する必要があるのかな? と思った次第です。 | ||||||||||||||||
|
投稿日時: 2006-05-25 02:23
インストーラで吸収するような要件じゃないと思うなぁ。 | ||||||||||||||||
|
投稿日時: 2006-05-25 11:39
どうやってインストール単位ごとに分けているのでしょうか? 少なくとも管理対象ごとにユニークなエントリー情報をもてない限り 複数インストールしても単にカウントがあがるだけで、対象を増やせるようには ならないと思うのですが?
この動きは WindowsInstaller アーキテクチャを使っていない場合でもきちんと ロゴに準拠できるように作られたインストーラなら全て同様の動きをします。 実際うちで以前作っていた独自インストーラも同じように動いてましたよ。 さて、私が思うに InstallShield 時代はスクリプトの中でUIからのフィードバックを 受けて独自にデータを作っていたのではないかと思われます(エントリー情報は ユニーク名を与えるINIかなにかで実現していたのでしょう)。 昔の InstallShield には同じインストーラでも複数回インストールできてしまう というバグがありましたので、そのバグを利用して実現できていたテクニックではないかと 思われます。 でこの動きを WindowsInstaller でトレースできるかというと、出来ません。 なので、別途設定ツールを作って以前のインストーラがスクリプトレベルで処理していた部分を そのツールで吸収するというのが一番無難な解決策ではないかと思います。 ちなみに、インストールしていないけど、任意のファイルを消せるという仕組みは インストーラに用意されていますよ。 詳しいことは、WindowsInstaller SDK のドキュメント(英語ですけどね(^^をご参照ください。 _________________ // とっちゃん(高萩 俊行)@わんくま同盟 // とっちゃん’Blog // MS-MVP for Developer Tools - Visual C++ // WindowsInstallerの話題はhttp://www.freeml.com/msiまで | ||||||||||||||||
|
投稿日時: 2006-05-28 00:54
ご回答ありがとうございます。
インストール後の初期設定で レジストリ登録して一意になるように設定しています。
以前はInstallsheild5.5を使用していました。 上司に確認してみると、とっちゃんさんの仰るとおり 恐らくそのバグを利用して作成しているとのことです。 (既に作った人がいないので詳しいことはわからないそうです)
上司に相談したところ、お二人の仰るように 別途設定ツールを作成する方向で決定しました。 迅速な回答、感謝いたします。 ありがとうございました。 WindowsInstaller SDK のドキュメント…英語は苦手ですがまた読んでみます! |
1