Visual Studio デベロッパー センター > Visual Studio フォーラム > Visual Studio 共通 フォーラム > VS2008で作成したsetup.exeをURL指定して実行するとエラーとなる
質問する質問する
 

回答済みVS2008で作成したsetup.exeをURL指定して実行するとエラーとなる

  • 2009年10月27日 10:28いおたん ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    Visual Studio 2008で作成したアプリを数人の友人に配布しようと考え、インストーラプロジェクトで作成したSetup.exeを公開しました。
    公開した際の構成は以下のようになっています。

    URL:
    http://www.hoge.com/TestInstaller/setup.exe

    ファイル構成:
    上記URLで参照できる仮想ディレクトリに
    ・setup.exe
    ・HogeSetup.msi
    ・WindowsInstaller3_1フォルダ
    を配置しています。

    ※setup.exeの必須コンポーネントとしてWindows Installer 3.1を選択しているため、
    「WindowsInstaller3_1フォルダ」が作成されています。

    この状態で上記URLを実行すると、ファイルのダウンロードダイアログで
    setup.exeのダウンロードが促されます。
    [実行]ボタン押下でダウンロード&実行されますが、「Hoge 必須コンポーネントをインストールしようとしてエラーが発生しました。」という
    メッセージが表示されます。

    前段が長くなりましたが、
    setup.exeの実行だけでHogeSetup.msi、必須コンポーネントのWindows Installer3.1が参照され、
    インストールが成功すればいいなぁと思っていたのですが、このような構成は不可能なのでしょうか?



    なお、エラーダイアログの[詳細>>]ボタン押下で表示されるエラーログにあるlogファイルを参照すると、
    以下の様に記載されています。

    ---ここから------------------
    The following properties have been set:
    Property: [AdminUser] = true {boolean}
    Property: [ProcessorArchitecture] = Intel {string}
    Property: [VersionNT] = 5.1.3 {version}
    Running checks for package 'Windows インストーラ 3.1', phase BuildList
    The following properties have been set for package 'Windows インストーラ 3.1':
    Running checks for command 'WindowsInstaller3_1\WindowsInstaller-KB893803-v2-x86.exe'
    Result of running operator 'VersionGreaterThanOrEqualTo' on property 'VersionMsi' and value '3.1': true
    Result of checks for command 'WindowsInstaller3_1\WindowsInstaller-KB893803-v2-x86.exe' is 'Bypass'
    'Windows インストーラ 3.1' RunCheck result: No Install Needed
    Launching Application.
    Error: アプリケーション ファイル 'HogeSetup.msi' が見つかりません。

    ---ここまで------------------

回答

  • 2009年10月28日 9:45gekka ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み
    セットアッププロジェクトのプロパティで"インストールのURL"をsetup.exeが公開されるURLにしておいて、必須コンポーネントを「アプリケーションと同じ場所から~」に指定してビルド。
    出来たファイルをそのURLに放り込んでおけばsetup.exe直接指定で必須コンポーネントもmsiもインストール出来ました。
    カスタム動作だとかは不要ですね。

    サーバー Vista + IIS6.0
    クライアント Windows2000SP4 WindowsInstaller3.1済み
    #WindowsInstaller3.1すら入れてない環境が無いので、無い状態でのテストは出来てません


  • 2009年10月28日 4:51とっちゃんMVPユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み

    んと。。。必須コンポーネントは、Windows Installer 3.1 だけですか?
    もしそうであれば、XP-SP3以降なら必要ありません。<インストールされている

    正確には、SP2 の後に出たパッチでインストールされるのですが、WindowsUpdate をこの3年以内の間に一度でも手動でやっていれば、例外なくインストールされています。

    もし、2000までも対象という場合は、別ですが...


    それと、setup.exe は事前にダウンロードが必要ですが、それ以外のものは、ビルド時の設定でDL先などを指定できたと思います。
    たしかmsiそのものも実行時にDLする仕組みはサポートされていたと思いますので、セットアッププロジェクトの設定を熟読してみるとよいと思いますよ。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
  • 2009年10月28日 9:57いおたん ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み
    とっちゃん さん
    回答いただき、ありがとうございます。

    んと。。。必須コンポーネントは、Windows Installer 3.1 だけですか?
    もしそうであれば、XP-SP3以降なら必要ありません。<インストールされている

    正確には、SP2 の後に出たパッチでインストールされるのですが、WindowsUpdate をこの3年以内の間に一度でも手動でやっていれば、例外なくインストールされています。

    もし、2000までも対象という場合は、別ですが...


    それと、setup.exe は事前にダウンロードが必要ですが、それ以外のものは、ビルド時の設定でDL先などを指定できたと思います。
    たしかmsiそのものも実行時にDLする仕組みはサポートされていたと思いますので、セットアッププロジェクトの設定を熟読してみるとよいと思いますよ。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    インストール対象がWin2000以上であったため、必須コンポーネントとしてのインストールが必要ということでした。

    また、教えていただいたセットアッププロジェクトの設定を再確認したところ、
    思い通りの挙動となりました。ありがとうございました。


    実際の設定内容:
    セットアッププロジェクトの[プロパティ]
    インストールURL:msi、必須コンポーネントフォルダが格納されているURLを指定
    (私の場合、http://www.hoge.com/TestInstaller/)
    必須コンポーネント画面:
    『必須コンポーネントをインストールするセットアッププログラムを作成する。』チェックボックスを入れる。
    『アプリケーションと同じ場所から必須コンポーネントをダウンロードする』ラジオボタンを選択する。


すべての返信

  • 2009年10月27日 16:20ひらぽん ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    この状態で上記URLを実行すると、ファイルのダウンロードダイアログで
    setup.exeのダウンロードが促されます。
    [実行]ボタン押下でダウンロード&実行されますが、「Hoge 必須コンポーネントをインストールしようとしてエラーが発生しました。」という
    メッセージが表示されます。

    前段が長くなりましたが、
    setup.exeの実行だけでHogeSetup.msi、必須コンポーネントのWindows Installer3.1が参照され、
    インストールが成功すればいいなぁと思っていたのですが、このような構成は不可能なのでしょうか?

    setup.exe は実質ブートストラップのようなもので、インストーラーの本体は HogeSetup.msi  になります。

    http://www.hoge.com/TestInstaller/setup.exe

    から setup.exe を実行すると、いったんクライアントPC の一時フォルダに setup.exe がダウンロードされ実行するわけですが、
    この際 setup.exe と同じ一時フォルダに HogeSetup.msi が存在しなければ、当然

    Error: アプリケーション ファイル 'HogeSetup.msi' が見つかりません。

    というエラーが出てインストールできません。

    では HogeSetup.msi だけ配布すればいいかというと、今回 Windows Installer3.1 も必須コンポーネントに指定してるので
    これも HogeSetup.msi  と同じフォルダに Windows Installer3.1 コンポーネントが存在しないとエラーになるでしょう。


    そこで web で簡単にアプリケーションを配布するなら ClickOnce を使うという手もあります。
    http://www.atmarkit.co.jp/fdotnet/clickonce/index/index.html


  • 2009年10月28日 0:15いおたん ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    ひらぽん さん
    回答いただき、ありがとうございます。
    では HogeSetup.msi だけ配布すればいいかというと、今回 Windows Installer3.1 も必須コンポーネントに指定してるので
    これも HogeSetup.msi  と同じフォルダに Windows Installer3.1 コンポーネントが存在しないとエラーになるでしょう。


    そこで web で簡単にアプリケーションを配布するなら ClickOnce を使うという手もあります。
    http://www.atmarkit.co.jp/fdotnet/clickonce/index/index.html

    なるほど、msiファイルが存在しないから件のメッセージが表示されてしまうということですね。
    確かにダウンロードはしていないでしょうから納得です。

    また、ClickOnceを使用する方法を提示いただき、ありがとうございます。
    あらかじめ記載して置けばよかったのですが、ClickOnceは使用しない方向で検討しています。

    理由としては(私事ですが)過去ClickOnceでつまずいてしまい、大幅にスケジュールを遅らせてしまったことがありまして・・・
    今回は通常のセットアッププロジェクトで作成するアプローチを採ることになりました。

    もちろん、本質が違っている気がしますが、セットアッププロジェクトでどこまで出来るのか若干調査も込んでいるので
    この方法で何とかなればと思っていたところです。
  • 2009年10月28日 1:29あんにんご ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    ClickOnce を使わない Web 配布の経験はありませんが案だけ、、、
    案1. msi ファイルなどを含めたセットアップファイル(hoge.exe)を自作してしまう。
    案2. setup1.exe をカスタマイズして .msi のダウンロード機能を持たせる。
      ↓参考サイト
      カスタム動作エディタの使い方
      http://dobon.net/vb/dotnet/deployment/customaction.html
      (http://dobon.net/ DOBON.NET トップページ)
  • 2009年10月28日 1:55ひらぽん ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    HogeSetup.msi だけ配布すればいいかというと、今回 Windows Installer3.1 も必須コンポーネントに指定してるので
    これも HogeSetup.msi  と同じフォルダに Windows Installer3.1 コンポーネントが存在しないとエラーになるでしょう。

    よくよく調べたら、上記の記述に誤りがありました。
    必須コンポーネントを配布する場合は msi だけじゃだめで、 setup.exe がないと、必須コンポーネントがインストールできないようです。

    以下、必須コンポーネントに関する参考URLです。
    http://www.atmarkit.co.jp/fdotnet/dotnettips/496msibootstrapper/msibootstrapper.html
  • 2009年10月28日 2:50いおたん ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    あんにんご さん
    案をいただき、ありがとうございます。
    ClickOnce を使わない Web 配布の経験はありませんが案だけ、、、
    案1. msi ファイルなどを含めたセットアップファイル(hoge.exe)を自作してしまう。
    案2. setup1.exe をカスタマイズして .msi のダウンロード機能を持たせる。
    ↓参考サイト
    カスタム動作エディタの使い方
    http://dobon.net/vb/dotnet/deployment/customaction.html
    http://dobon.net/ DOBON.NET トップページ)
    なるほど・・・やはり多少カスタマイズが必要だということですね。
    そもそも"カスタム動作エディタ"とは何だろう?というレベルですので、
    教えていただいたサイト等を参考に調べてみたいと思います。
  • 2009年10月28日 2:54いおたん ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    HogeSetup.msi だけ配布すればいいかというと、今回 Windows Installer3.1 も必須コンポーネントに指定してるので
    これも HogeSetup.msi  と同じフォルダに Windows Installer3.1 コンポーネントが存在しないとエラーになるでしょう。

    よくよく調べたら、上記の記述に誤りがありました。
    必須コンポーネントを配布する場合は msi だけじゃだめで、 setup.exe がないと、必須コンポーネントがインストールできないようです。

    以下、必須コンポーネントに関する参考URLです。
    http://www.atmarkit.co.jp/fdotnet/dotnettips/496msibootstrapper/msibootstrapper.html
    URLの提示、ありがとうございます。
    まずは熟読するところからはじめたいと思います。
  • 2009年10月28日 4:51とっちゃんMVPユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み

    んと。。。必須コンポーネントは、Windows Installer 3.1 だけですか?
    もしそうであれば、XP-SP3以降なら必要ありません。<インストールされている

    正確には、SP2 の後に出たパッチでインストールされるのですが、WindowsUpdate をこの3年以内の間に一度でも手動でやっていれば、例外なくインストールされています。

    もし、2000までも対象という場合は、別ですが...


    それと、setup.exe は事前にダウンロードが必要ですが、それ以外のものは、ビルド時の設定でDL先などを指定できたと思います。
    たしかmsiそのものも実行時にDLする仕組みはサポートされていたと思いますので、セットアッププロジェクトの設定を熟読してみるとよいと思いますよ。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
  • 2009年10月28日 9:45gekka ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み
    セットアッププロジェクトのプロパティで"インストールのURL"をsetup.exeが公開されるURLにしておいて、必須コンポーネントを「アプリケーションと同じ場所から~」に指定してビルド。
    出来たファイルをそのURLに放り込んでおけばsetup.exe直接指定で必須コンポーネントもmsiもインストール出来ました。
    カスタム動作だとかは不要ですね。

    サーバー Vista + IIS6.0
    クライアント Windows2000SP4 WindowsInstaller3.1済み
    #WindowsInstaller3.1すら入れてない環境が無いので、無い状態でのテストは出来てません


  • 2009年10月28日 9:57いおたん ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み
    とっちゃん さん
    回答いただき、ありがとうございます。

    んと。。。必須コンポーネントは、Windows Installer 3.1 だけですか?
    もしそうであれば、XP-SP3以降なら必要ありません。<インストールされている

    正確には、SP2 の後に出たパッチでインストールされるのですが、WindowsUpdate をこの3年以内の間に一度でも手動でやっていれば、例外なくインストールされています。

    もし、2000までも対象という場合は、別ですが...


    それと、setup.exe は事前にダウンロードが必要ですが、それ以外のものは、ビルド時の設定でDL先などを指定できたと思います。
    たしかmsiそのものも実行時にDLする仕組みはサポートされていたと思いますので、セットアッププロジェクトの設定を熟読してみるとよいと思いますよ。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    インストール対象がWin2000以上であったため、必須コンポーネントとしてのインストールが必要ということでした。

    また、教えていただいたセットアッププロジェクトの設定を再確認したところ、
    思い通りの挙動となりました。ありがとうございました。


    実際の設定内容:
    セットアッププロジェクトの[プロパティ]
    インストールURL:msi、必須コンポーネントフォルダが格納されているURLを指定
    (私の場合、http://www.hoge.com/TestInstaller/)
    必須コンポーネント画面:
    『必須コンポーネントをインストールするセットアッププログラムを作成する。』チェックボックスを入れる。
    『アプリケーションと同じ場所から必須コンポーネントをダウンロードする』ラジオボタンを選択する。


  • 2009年10月28日 10:03いおたん ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    gekka さん
    回答いただき、ありがとうございます。
    セットアッププロジェクトのプロパティで"インストールのURL"をsetup.exeが公開されるURLにしておいて、必須コンポーネントを「アプリケーションと同じ場所から~」に指定してビルド。
    出来たファイルをそのURLに放り込んでおけばsetup.exe直接指定で必須コンポーネントもmsiもインストール出来ました。
    カスタム動作だとかは不要ですね。

    サーバー Vista + IIS6.0
    クライアント Windows2000SP4 WindowsInstaller3.1済み
    #WindowsInstaller3.1すら入れてない環境が無いので、無い状態でのテストは出来てません
    まさに今書き込んだ内容と入れ違いになってしまいましたが、ご検証いただきありがとうございました。
    当方も同様の設定で思い通りの挙動とすることができました。