VS2008で作成したsetup.exeをURL指定して実行するとエラーとなる
- 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' が見つかりません。
---ここまで------------------
回答
- セットアッププロジェクトのプロパティで"インストールのURL"をsetup.exeが公開されるURLにしておいて、必須コンポーネントを「アプリケーションと同じ場所から~」に指定してビルド。
出来たファイルをそのURLに放り込んでおけばsetup.exe直接指定で必須コンポーネントもmsiもインストール出来ました。
カスタム動作だとかは不要ですね。
サーバー Vista + IIS6.0
クライアント Windows2000SP4 WindowsInstaller3.1済み
#WindowsInstaller3.1すら入れてない環境が無いので、無い状態でのテストは出来てません
- 回答としてマークいおたん 2009年10月28日 10:04
んと。。。必須コンポーネントは、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日 10:04
- とっちゃん さん
回答いただき、ありがとうございます。
インストール対象がWin2000以上であったため、必須コンポーネントとしてのインストールが必要ということでした。んと。。。必須コンポーネントは、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/
また、教えていただいたセットアッププロジェクトの設定を再確認したところ、
思い通りの挙動となりました。ありがとうございました。
実際の設定内容:
セットアッププロジェクトの[プロパティ]
インストールURL:msi、必須コンポーネントフォルダが格納されているURLを指定
(私の場合、http://www.hoge.com/TestInstaller/)
必須コンポーネント画面:
『必須コンポーネントをインストールするセットアッププログラムを作成する。』チェックボックスを入れる。
『アプリケーションと同じ場所から必須コンポーネントをダウンロードする』ラジオボタンを選択する。
- 回答としてマークいおたん 2009年10月28日 10:04
すべての返信
この状態で上記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- ひらぽん さん
回答いただき、ありがとうございます。では HogeSetup.msi だけ配布すればいいかというと、今回 Windows Installer3.1 も必須コンポーネントに指定してるので
なるほど、msiファイルが存在しないから件のメッセージが表示されてしまうということですね。
これも HogeSetup.msi と同じフォルダに Windows Installer3.1 コンポーネントが存在しないとエラーになるでしょう。
そこで web で簡単にアプリケーションを配布するなら ClickOnce を使うという手もあります。
http://www.atmarkit.co.jp/fdotnet/clickonce/index/index.html
確かにダウンロードはしていないでしょうから納得です。
また、ClickOnceを使用する方法を提示いただき、ありがとうございます。
あらかじめ記載して置けばよかったのですが、ClickOnceは使用しない方向で検討しています。
理由としては(私事ですが)過去ClickOnceでつまずいてしまい、大幅にスケジュールを遅らせてしまったことがありまして・・・
今回は通常のセットアッププロジェクトで作成するアプローチを採ることになりました。
もちろん、本質が違っている気がしますが、セットアッププロジェクトでどこまで出来るのか若干調査も込んでいるので
この方法で何とかなればと思っていたところです。 - ClickOnce を使わない Web 配布の経験はありませんが案だけ、、、
案1. msi ファイルなどを含めたセットアップファイル(hoge.exe)を自作してしまう。
案2. setup1.exe をカスタマイズして .msi のダウンロード機能を持たせる。
↓参考サイト
カスタム動作エディタの使い方
http://dobon.net/vb/dotnet/deployment/customaction.html
(http://dobon.net/ DOBON.NET トップページ) HogeSetup.msi だけ配布すればいいかというと、今回 Windows Installer3.1 も必須コンポーネントに指定してるので
これも HogeSetup.msi と同じフォルダに Windows Installer3.1 コンポーネントが存在しないとエラーになるでしょう。
よくよく調べたら、上記の記述に誤りがありました。
必須コンポーネントを配布する場合は msi だけじゃだめで、 setup.exe がないと、必須コンポーネントがインストールできないようです。
以下、必須コンポーネントに関する参考URLです。
http://www.atmarkit.co.jp/fdotnet/dotnettips/496msibootstrapper/msibootstrapper.html- あんにんご さん
案をいただき、ありがとうございます。ClickOnce を使わない Web 配布の経験はありませんが案だけ、、、
なるほど・・・やはり多少カスタマイズが必要だということですね。
案1. msi ファイルなどを含めたセットアップファイル(hoge.exe)を自作してしまう。
案2. setup1.exe をカスタマイズして .msi のダウンロード機能を持たせる。
↓参考サイト
カスタム動作エディタの使い方
http://dobon.net/vb/dotnet/deployment/customaction.html
(http://dobon.net/ DOBON.NET トップページ)
そもそも"カスタム動作エディタ"とは何だろう?というレベルですので、
教えていただいたサイト等を参考に調べてみたいと思います。
URLの提示、ありがとうございます。HogeSetup.msi だけ配布すればいいかというと、今回 Windows Installer3.1 も必須コンポーネントに指定してるので
これも HogeSetup.msi と同じフォルダに Windows Installer3.1 コンポーネントが存在しないとエラーになるでしょう。
よくよく調べたら、上記の記述に誤りがありました。
必須コンポーネントを配布する場合は msi だけじゃだめで、 setup.exe がないと、必須コンポーネントがインストールできないようです。
以下、必須コンポーネントに関する参考URLです。
http://www.atmarkit.co.jp/fdotnet/dotnettips/496msibootstrapper/msibootstrapper.html
まずは熟読するところからはじめたいと思います。んと。。。必須コンポーネントは、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日 10:04
- セットアッププロジェクトのプロパティで"インストールのURL"をsetup.exeが公開されるURLにしておいて、必須コンポーネントを「アプリケーションと同じ場所から~」に指定してビルド。
出来たファイルをそのURLに放り込んでおけばsetup.exe直接指定で必須コンポーネントもmsiもインストール出来ました。
カスタム動作だとかは不要ですね。
サーバー Vista + IIS6.0
クライアント Windows2000SP4 WindowsInstaller3.1済み
#WindowsInstaller3.1すら入れてない環境が無いので、無い状態でのテストは出来てません
- 回答としてマークいおたん 2009年10月28日 10:04
- とっちゃん さん
回答いただき、ありがとうございます。
インストール対象がWin2000以上であったため、必須コンポーネントとしてのインストールが必要ということでした。んと。。。必須コンポーネントは、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/
また、教えていただいたセットアッププロジェクトの設定を再確認したところ、
思い通りの挙動となりました。ありがとうございました。
実際の設定内容:
セットアッププロジェクトの[プロパティ]
インストールURL:msi、必須コンポーネントフォルダが格納されているURLを指定
(私の場合、http://www.hoge.com/TestInstaller/)
必須コンポーネント画面:
『必須コンポーネントをインストールするセットアッププログラムを作成する。』チェックボックスを入れる。
『アプリケーションと同じ場所から必須コンポーネントをダウンロードする』ラジオボタンを選択する。
- 回答としてマークいおたん 2009年10月28日 10:04
- gekka さん
回答いただき、ありがとうございます。セットアッププロジェクトのプロパティで"インストールのURL"をsetup.exeが公開されるURLにしておいて、必須コンポーネントを「アプリケーションと同じ場所から~」に指定してビルド。
まさに今書き込んだ内容と入れ違いになってしまいましたが、ご検証いただきありがとうございました。
出来たファイルをそのURLに放り込んでおけばsetup.exe直接指定で必須コンポーネントもmsiもインストール出来ました。
カスタム動作だとかは不要ですね。
サーバー Vista + IIS6.0
クライアント Windows2000SP4 WindowsInstaller3.1済み
#WindowsInstaller3.1すら入れてない環境が無いので、無い状態でのテストは出来てません
当方も同様の設定で思い通りの挙動とすることができました。


