none
セットアッププロジェクトでインストール済みフォルダの検出 RRS feed

  • 質問

  • こんにちは。

    セットアッププロジェクトでインストーラを作成しまして、
    既にインストール完了しているアプリケーションがあります。

    例えば、インストール際が、D:\Program Files\AAA\BBB
    だったとします。


    次に、アップデートを行う必要がでてきました。

    このとき新しいセットアッププロジェクトで、
    前のバージョンのインストール先の、
    D:\Program Files\AAA\BBB
    を自動検出して、この中に上書きインストール
    したいと考えております。

     

    もし、セットアッププロジェクトを普通に作成しますと、
    インストーラ起動中に、インストール先を指定する
    ウィンドウが出てしまい、別の場所にインストール
    される可能性があります。


    このような対策をするにはどうすればよろしいでしょうか?
    よろしくお願い致します。

    2010年10月15日 9:36

回答

  • そもそも、全く別のセットアッププロジェクトから上書きコピーのように同じ場所にインストールするべきではありません。
    何らかのトリガーで、以前のバージョンの修復インストールが始まる恐れがあります。
    (Windows Installer からは全く別の製品が同じ場所にインストールされたと認識されるはず)

    正しい手順としては、Product Code, Package Code, Upgrade Code あたりを調整して、アップグレードインストールとして処理させることでしょうか?
    ただし、この手順の場合にインストール先が問われるかどうかなどは確認していません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 山本春海 2010年11月8日 4:23
    2010年10月15日 14:25
    モデレータ
  • VSセットアップでは現在想定しているようなことは残念ですができません。現在想定しているようなアップデートは、パッチ提供(msp)または、マイナーアップグレードと呼ばれる形で更新を行うことになります。

    ですが、VSセットアップや、InstallShield-LimitedEdition は、マイナーアップグレードやパッチ作成はサポートしておらず、メジャーアップグレードと呼ばれる形式のアップデートパターンしか提供していません(インストーラの設計をしなくて良いという設計思想に基づく素人向けのサポートなので致し方ない)。

    ですので、これを実現するには、WiXないしは、InstallShield Pro以上の製品を導入して(Expressもできるかどうかわかりません)マイナーアップグレードのインストーラを作るか、パッチを作成するかのいずれかになります。

    また、アプリのバージョンアップ内容の構成上メジャーアップグレードでこれをサポートする必要がある場合は、カスタムアクション(VSのカスタム動作と名前的には同じですがものは全く違うもの)を使って起動時に従来バージョンのインストール先を取り出して、それを設定して以後変更できないようにするというやり方になります。

    この場合は、UIの処理を全面的に書き換えることになりますので、やはりWiXないしはInstallShieldのPro以上(Expressはたぶんできない)が必要になります。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    • 回答としてマーク 山本春海 2010年11月8日 4:23
    2010年10月15日 14:34

すべての返信

  • インストール先をレジストリに登録しておいて、

    アップデート時にそのレジストリからパスを取得してインストールすればいいと思います。

    2010年10月15日 10:12
  • さっそくご返事ありがとうございます。

    できればレジストリの使用は避けたいと思っております。

    (私自信があまりレジストリ関連に詳しくないので、なんとなく恐怖心で・・)

     

    他に設定する方法があれば良いのですが・・・

     

    2010年10月15日 10:26
  • 修復インストールを中身を入れ替えて行うのはどうでしょうか?

    パスを自動検出しますし、上書きも可能です。

    デメリットはインストーラのUIで、メンテナンスモードのUIかサイレントモードになりますので、検討してみてください。

    2010年10月15日 10:52
  • さっそくのご返事ありがとうございます。

    なるほど、修正インストールという手もありますね。

     

    ただ、出来れば、標準インストールで出来れば良いのですが。

    なんとなく、みてくれが良くないので、お客さんの反応が気になるので。。

     

    普通にセットアッププロジェクトで設定することは出来ないものでしょうか?

    無ければ、教えて頂いたように、レジストリか修正インストールのどちらかで

    検討を進めようと思います。

     

     

    2010年10月15日 11:31
  • そもそも、全く別のセットアッププロジェクトから上書きコピーのように同じ場所にインストールするべきではありません。
    何らかのトリガーで、以前のバージョンの修復インストールが始まる恐れがあります。
    (Windows Installer からは全く別の製品が同じ場所にインストールされたと認識されるはず)

    正しい手順としては、Product Code, Package Code, Upgrade Code あたりを調整して、アップグレードインストールとして処理させることでしょうか?
    ただし、この手順の場合にインストール先が問われるかどうかなどは確認していません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 山本春海 2010年11月8日 4:23
    2010年10月15日 14:25
    モデレータ
  • VSセットアップでは現在想定しているようなことは残念ですができません。現在想定しているようなアップデートは、パッチ提供(msp)または、マイナーアップグレードと呼ばれる形で更新を行うことになります。

    ですが、VSセットアップや、InstallShield-LimitedEdition は、マイナーアップグレードやパッチ作成はサポートしておらず、メジャーアップグレードと呼ばれる形式のアップデートパターンしか提供していません(インストーラの設計をしなくて良いという設計思想に基づく素人向けのサポートなので致し方ない)。

    ですので、これを実現するには、WiXないしは、InstallShield Pro以上の製品を導入して(Expressもできるかどうかわかりません)マイナーアップグレードのインストーラを作るか、パッチを作成するかのいずれかになります。

    また、アプリのバージョンアップ内容の構成上メジャーアップグレードでこれをサポートする必要がある場合は、カスタムアクション(VSのカスタム動作と名前的には同じですがものは全く違うもの)を使って起動時に従来バージョンのインストール先を取り出して、それを設定して以後変更できないようにするというやり方になります。

    この場合は、UIの処理を全面的に書き換えることになりますので、やはりWiXないしはInstallShieldのPro以上(Expressはたぶんできない)が必要になります。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    • 回答としてマーク 山本春海 2010年11月8日 4:23
    2010年10月15日 14:34