none
セットアッププロジェクトについて教えてください RRS feed

  • 質問

  • Visual Studio 2005 Pro のセットアッププロジェクトで C++アプリケーションのインストーラーを作っています。

     

    2点教えていただきたいことがあります。

     

    1. コマンドライン引数としてパラメータをセットアップ(msi)で受け取りたいのですのが可能でしょうか?

      また、パラメータを受け取れる場合、そのパラメータ値をカスタム動作のexe等に引き渡すことはできるでしょうか?

     

    2. セットアッププロジェクトで作成した*.msiを実行すると、「プログラムの追加と削除」に登録され、

      アンインストールできるようになります。

      このアンインストールをカスタマイズしたいのですが可能でしょうか?

      具体的には、上記1のパラメータを違えてセットアップを複数回実行した場合に、そのパラメータをもった

      アンインストールをそれぞれ作成したいのです。

     

    よろしくお願いします。

    2007年11月6日 13:29

回答

  • >VSのセットアッププロジェクトで利用できないとのことですが、WiXを使ってインストーラを作る場合は、利用可能でしょうか?

    WiX や InstallShieldなど、自分でプロパティを参照して何かをするというのを自由に行えるツールであれば、それを受けていろいろやるのは可能です。

    VSセットアップでも、パラメータで何をするかの部分がConditionだけで済むのであれば利用できます。

     

     

    2 のほうですが、msi(WindowsInstaller)では、HKLM の Uninstall キーにあるのは、あくまでもコンパネに乗せる情報であって実際のインストール管理情報は別の場所に格納されています。

     

    そのため、もし、いろいろやるのであれば ProductCode を変更しなければなりません。

     

    が、ProductCode は実行時に変えられるものではありませんので、単一の msi ファイルを使って複数のインストールセットを同一マシンで実現することはできません。

     

    なので、どうしてもそういったことがしたいのであれば、似て非なるインストールセットを複数用意するということになります。

    ただし、その場合、Componentのキーを合わせる、あるいは変更するということをしなければなりませんので、VSセットアップでは絶対に実現することは不可能です。

     

    この場合、WiXあるいはInstallShield を利用して、条件ビルドしつつ、実行時のパラメータに当たるものをビルド条件に与えて、インストールセットを構築していくことになると思います。

     

    はっきりってしまうと、あんまり現実的ではないということになりますが...

     

    2007年11月7日 10:32
  •  Mippy2 さんからの引用

    msi でインストールした場合に、インストール管理情報やアンインストール情報を一切登録させない、という設定もやっぱり無理でしょうか?

     

    結局、そこまでカスタマイズするなら、普通にセットアッププログラムを自分で書いたほうが速い、ということになってしまうのですかね。。。。

    WindowsInstaller というシステム使っている限り、インストール管理情報を登録しないというのは不可能ですね。

     

    アンインストール情報として見せない(=コンパネに表示させない)という方法はあります。

    ただし、これはあくまでも見えないというだけで、実際にはインストールされていますので、同じmsiを動かせばやはりメンテモードになります。

    こちらは、ARPSYSTEMCOMPONENT プロパティで制御できます。
    #VSセットアッププロジェクトでは設定する方法そのものが用意されていませんので、ORCA なりで後から設定となりますけどね。

     

    どうしても、単一のインストールパッケージからということであれば、独自のインストレーションシステムを作ることを視野に入れたほうがいいでしょうね。

     

    ま、おいらなら、msi を複数個用意して必要に応じて起動するmsiを切り分けることを検討しますけどw

    2007年11月8日 7:02

すべての返信

  • 1.は可能です。

    起動パラメータに、PARAMNAME=なにがし と書くと、インストーラの中では、PARAMNAME プロパティになにがしという内容がセットされます。

    ただし、それをVSのセットアッププロジェクトで利用して何とかというのはほぼ不可能に近いですけどw

     

    2.ですがこちらはできません。

    msi ひとつでインストールできるのは、一種類のインストールセットではなく、単一のインストールセットです。

    したがって、インストールしているところでもう一度実行するというのは、別のインストール単位としてインストールではなく、

    単に修復など、メンテナンスが行われるという形になります。

     

    なので、「具体的には...」という部分で実現したいと思っていることは、WindowsInstaller を用いて作成するのは無理です。

     

    2007年11月7日 4:10
  • とっちゃんさん、ありがとうございます。

    もう少しおつきあいください。。。

    >1.は可能です。

    >起動パラメータに、PARAMNAME=なにがし と書くと、インストーラの中では、PARAMNAME プロパティになにがしという内容が>セットされます。

    >ただし、それをVSのセットアッププロジェクトで利用して何とかというのはほぼ不可能に近いですけどw

     

    起動パラメータに記述すれば良いのですね。

    VSのセットアッププロジェクトで利用できないとのことですが、WiXを使ってインストーラを作る場合は、利用可能でしょうか?

     

    >2.ですがこちらはできません。

    >msi ひとつでインストールできるのは、一種類のインストールセットではなく、単一のインストールセットです。

    >したがって、インストールしているところでもう一度実行するというのは、別のインストール単位としてインストールではなく、

    >単に修復など、メンテナンスが行われるという形になります。

     

    レジストリのHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 配下を自力で書き換えれば可能でしょうか?

     

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\APP

        ↓

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\APP_A

     

    として、もう一度msiを実行すると別のインストールとして認識してもらえるのでは。。。と思っていますが、無理でしょうか。

     

    すみませんが、よろしくお願いします。

     

    2007年11月7日 6:35
  • >VSのセットアッププロジェクトで利用できないとのことですが、WiXを使ってインストーラを作る場合は、利用可能でしょうか?

    WiX や InstallShieldなど、自分でプロパティを参照して何かをするというのを自由に行えるツールであれば、それを受けていろいろやるのは可能です。

    VSセットアップでも、パラメータで何をするかの部分がConditionだけで済むのであれば利用できます。

     

     

    2 のほうですが、msi(WindowsInstaller)では、HKLM の Uninstall キーにあるのは、あくまでもコンパネに乗せる情報であって実際のインストール管理情報は別の場所に格納されています。

     

    そのため、もし、いろいろやるのであれば ProductCode を変更しなければなりません。

     

    が、ProductCode は実行時に変えられるものではありませんので、単一の msi ファイルを使って複数のインストールセットを同一マシンで実現することはできません。

     

    なので、どうしてもそういったことがしたいのであれば、似て非なるインストールセットを複数用意するということになります。

    ただし、その場合、Componentのキーを合わせる、あるいは変更するということをしなければなりませんので、VSセットアップでは絶対に実現することは不可能です。

     

    この場合、WiXあるいはInstallShield を利用して、条件ビルドしつつ、実行時のパラメータに当たるものをビルド条件に与えて、インストールセットを構築していくことになると思います。

     

    はっきりってしまうと、あんまり現実的ではないということになりますが...

     

    2007年11月7日 10:32
  • とっちゃんさん、回答ありがとうございます。

     

    >2 のほうですが、msi(WindowsInstaller)では、HKLM の Uninstall キーにあるのは、あくまでもコンパネに乗せる情報であって実>際のインストール管理情報は別の場所に格納されています。

     

    そうですか。。。

    msi でインストールした場合に、インストール管理情報やアンインストール情報を一切登録させない、という設定もやっぱり無理でしょうか?

     

    結局、そこまでカスタマイズするなら、普通にセットアッププログラムを自分で書いたほうが速い、ということになってしまうのですかね。。。。

    2007年11月7日 12:38
  •  Mippy2 さんからの引用

    msi でインストールした場合に、インストール管理情報やアンインストール情報を一切登録させない、という設定もやっぱり無理でしょうか?

     

    結局、そこまでカスタマイズするなら、普通にセットアッププログラムを自分で書いたほうが速い、ということになってしまうのですかね。。。。

    WindowsInstaller というシステム使っている限り、インストール管理情報を登録しないというのは不可能ですね。

     

    アンインストール情報として見せない(=コンパネに表示させない)という方法はあります。

    ただし、これはあくまでも見えないというだけで、実際にはインストールされていますので、同じmsiを動かせばやはりメンテモードになります。

    こちらは、ARPSYSTEMCOMPONENT プロパティで制御できます。
    #VSセットアッププロジェクトでは設定する方法そのものが用意されていませんので、ORCA なりで後から設定となりますけどね。

     

    どうしても、単一のインストールパッケージからということであれば、独自のインストレーションシステムを作ることを視野に入れたほうがいいでしょうね。

     

    ま、おいらなら、msi を複数個用意して必要に応じて起動するmsiを切り分けることを検討しますけどw

    2007年11月8日 7:02