トップ回答者
ASP.NETセットアッププロジェクトのインストーラーを起動すると、処理が中断してしまう

質問
-
下記の記事の再掲です。(Visual basicフォーラムだとスレッド違いということなのでこちらに移動しました)
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/0d8ff2db-fd76-4063-a950-ac11958a13e7/aspnet?forum=vbgeneralja
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/bfcc84e6-bb56-49a4-b53d-44ebb19884d5/web?forum=vbgeneralja
ASP.NETセットアッププロジェクトのインストーラーを起動すると、処理が中断してしまう
ASP.NETセットアッププロジェクトを作成しようとしているのですが、初歩的なところでつまづいています。
開発環境 Visual Studio 2010 SP1
下記の記事を見て実施しています。
http://www.atmarkit.co.jp/fdotnet/tools/websetup/websetup_01.html
ごくごく単純なWebアプリケーションを作ってセットアップが動くか確認しています。サーバー側のシステム時刻を表示するWebページ1ページだけのアプリです。
画面(Default.aspx)
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebApplicationSample._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label id="lblData" runat="server"></asp:Label>
</div>
</form>
</body>
</html>
コードビハインドファイル(Default.aspx.vb)
Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
lblData.Text = "今の時間は" & Now() & "です"
End Sub
End Class
作成したソリューションのWebプロジェクトは.NET Framework 2.0 を使用。(最終的にセットアップを作成したいアプリのFrameworkです。)
ソリューション名:WebApplicationSampleSetup
Webアプリケーションプロジェクト名:WebApplicationSampleSetup
Web名:WebApplicationSampleSetup
"プロジェクト出力"で"プライマリ出力"と"コンテンツファイル"を指定
セットアッププロジェクトをビルドすると、下記の警告が出ますが、Setup.exeとWebApplicationSampleSetup.msiは出力します。
"警告: プロジェクトの .NET Framework のターゲット バージョンが、.NET Framework 起動条件のバージョン '.NET Framework 4 Client Profile' と一致しません。.NET Framework 起動条件を更新して、[詳細コンパイル オプション] ダイアログ ボックス (VB の場合) または [アプリケーション] ページ (C#、F# の場合) の .NET Framework のターゲット バージョンと一致するようにしてください。"
".NET Framework 起動条件"の記事を見たのですが意味が理解できませんでした。
https://msdn.microsoft.com/ja-jp/library/xxyh2e6a%28v=vs.90%29.aspx?f=255&MSPPError=-2147217396
インストーラーのSetup.exeをダブルクリックして実行すると、開発環境とその他の環境1台両方(Windows 7 SP1)両方で下記のエラーになります。
"インストールは未完了です。WebApplicationSampleSetupのインストール中にインストーラーが中断されました。再度実行するためにインストーラーを再起動する必要があります。"
なにが悪いのでしょうか?デバッグの方法等手がかりが全くなくて悩んでいます。
追加で必要な情報がございましたら教えて頂けないでしょうか?
(手動での手順は確立しています)
・インストール先ドライブの指定
・アプリケーションでデータを格納するSQLServerのインストール
・SQLServerでのデータベースの作成、ログインの作成、テーブルの作成
・依存関係のdllの設定(サードパーティ―製のdll)
・IISの役割の追加(可能ならサーバー製品で)
・.NET Frameworkの機能の追加(例:Windows Server 2008/2012ならばアプリケーション稼働に必要な.NET Framework 3.5の機能)
・設定ファイル(xmlテキストファイル)の書き換え(データベース接続文字列等)
・IISのアプリケーションプールの追加
・アプリケーションフォルダをIISにアプリケーションとして登録
・アプリケーションフォルダにフォルダ権限(NETWORK SERVICE)の付与
上記はWebセットアッププロジェクトで実現可能でしょうか?
- 編集済み ill2 2015年12月28日 1:45
回答
-
セットアッププロジェクトをビルドすると、下記の警告が出ますが、Setup.exeとWebApplicationSampleSetup.msiは出力します。
"警告: プロジェクトの .NET Framework のターゲット バージョンが、.NET Framework 起動条件のバージョン '.NET Framework 4 Client Profile' と一致しません。.NET Framework 起動条件を更新して、[詳細コンパイル オプション] ダイアログ ボックス (VB の場合) または [アプリケーション] ページ (C#、F# の場合) の .NET Framework のターゲット バージョンと一致するようにしてください。"
アプリケーションが必要としている.NetFrameworkのバージョンと、インストーラーが対象にしているバージョンが一致していないので警告だけ出ます。
セットアッププロジェクトの初期設定は4.0がインストールされていることを確認してからインストールするようになっているので、アプリケーションが2.0にしていると一致していないので警告しています。
一応互換はあるので2.0~3.5がインストールされていなくても4.0で動きます。一致させるには、ソリューションエクスプローラーでセットアッププロジェクトを右クリックして、表示->起動条件をえらんで、表示された画面の起動条件にある.NetFrameworkを選択し、プロパティウィンドウにあるVersionのドロップダウンから2.0を選びます。
インストーラーのSetup.exeをダブルクリックして実行すると、開発環境とその他の環境1台両方(Windows 7 SP1)両方で下記のエラーになります。
"インストールは未完了です。WebApplicationSampleSetupのインストール中にインストーラーが中断されました。再度実行するためにインストーラーを再起動する必要があります。"
インストールしようとしている環境にIISがインストールされていないか設定が不足していると、このエラーが出るみたいです。
VisualStudioでデバッグ中はVisualStudioがサーバー機能を提供してくれますが、通常がIISで実行するためIISが正しく設定されていないといけません。コントロールパネル->プログラムと機能->Windowsの機能の有効化または無効化->インターネットインフォメーションサービスにチェックを入れて、追加でWeb管理ツール->IIS6と互換性のある管理->IisメタベースおよびIIS6構成との互換性にもチェックがいるようです。
他にも不足があるかもしれないので、同じエラーが出る場合は他のチェックも試してみてください。その他
インストール先については先にIISで物理ディレクトリが目的のドライブになっている仮想ディレクトリを設定することになるでしょうか。
.NetFrameworkのインストールは必須コンポーネントで設定できますが、他の要望については簡単に設定する方法はないですね。
インストーラーの実行中にカスタム動作として他のプログラムを呼び出したりデータベースを設定したりすることは可能です。
この機能でスクリプトを呼ぶなどすればIIS設定などは行えるでしょう。
#PowerShellでiisをインストールするとかは検索すると見つかりますねしかし、カスタム動作中に別のインストーラーを起動することはできないです。(インストール完了後に別プロセスでVBSなどでインストーラーが起動されるようにすることは可能です)
ですから、複数のインストールを行うことが必要であればインストーラーを順番に呼び出すバッチファイルやスクリプトあるいは同様のWindowsフォームやコンソールプログラムを用意した方がいいのではないでしょうか。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答としてマーク 星 睦美 2016年1月7日 0:30
すべての返信
-
上記の件、Webセットアッププロジェクトでは無理ならば、Windowsフォームアプリかコンソールアプリでインストーラを作成することも検討しています。
VB.NETのプログラム中でDOSコマンドやPowerShellコマンドレットを出力する方法はあるみたいなので・・・ただ工数がどちらが大きくなるかが分かりません。
可能でしたらアドバイスお願いいたします。
http://dobon.net/vb/dotnet/process/standardoutput.html
http://d.hatena.ne.jp/newpops/20060922/p1
- 編集済み ill2 2015年12月28日 6:55
-
セットアッププロジェクトをビルドすると、下記の警告が出ますが、Setup.exeとWebApplicationSampleSetup.msiは出力します。
"警告: プロジェクトの .NET Framework のターゲット バージョンが、.NET Framework 起動条件のバージョン '.NET Framework 4 Client Profile' と一致しません。.NET Framework 起動条件を更新して、[詳細コンパイル オプション] ダイアログ ボックス (VB の場合) または [アプリケーション] ページ (C#、F# の場合) の .NET Framework のターゲット バージョンと一致するようにしてください。"
アプリケーションが必要としている.NetFrameworkのバージョンと、インストーラーが対象にしているバージョンが一致していないので警告だけ出ます。
セットアッププロジェクトの初期設定は4.0がインストールされていることを確認してからインストールするようになっているので、アプリケーションが2.0にしていると一致していないので警告しています。
一応互換はあるので2.0~3.5がインストールされていなくても4.0で動きます。一致させるには、ソリューションエクスプローラーでセットアッププロジェクトを右クリックして、表示->起動条件をえらんで、表示された画面の起動条件にある.NetFrameworkを選択し、プロパティウィンドウにあるVersionのドロップダウンから2.0を選びます。
インストーラーのSetup.exeをダブルクリックして実行すると、開発環境とその他の環境1台両方(Windows 7 SP1)両方で下記のエラーになります。
"インストールは未完了です。WebApplicationSampleSetupのインストール中にインストーラーが中断されました。再度実行するためにインストーラーを再起動する必要があります。"
インストールしようとしている環境にIISがインストールされていないか設定が不足していると、このエラーが出るみたいです。
VisualStudioでデバッグ中はVisualStudioがサーバー機能を提供してくれますが、通常がIISで実行するためIISが正しく設定されていないといけません。コントロールパネル->プログラムと機能->Windowsの機能の有効化または無効化->インターネットインフォメーションサービスにチェックを入れて、追加でWeb管理ツール->IIS6と互換性のある管理->IisメタベースおよびIIS6構成との互換性にもチェックがいるようです。
他にも不足があるかもしれないので、同じエラーが出る場合は他のチェックも試してみてください。その他
インストール先については先にIISで物理ディレクトリが目的のドライブになっている仮想ディレクトリを設定することになるでしょうか。
.NetFrameworkのインストールは必須コンポーネントで設定できますが、他の要望については簡単に設定する方法はないですね。
インストーラーの実行中にカスタム動作として他のプログラムを呼び出したりデータベースを設定したりすることは可能です。
この機能でスクリプトを呼ぶなどすればIIS設定などは行えるでしょう。
#PowerShellでiisをインストールするとかは検索すると見つかりますねしかし、カスタム動作中に別のインストーラーを起動することはできないです。(インストール完了後に別プロセスでVBSなどでインストーラーが起動されるようにすることは可能です)
ですから、複数のインストールを行うことが必要であればインストーラーを順番に呼び出すバッチファイルやスクリプトあるいは同様のWindowsフォームやコンソールプログラムを用意した方がいいのではないでしょうか。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答としてマーク 星 睦美 2016年1月7日 0:30
-
丁寧なご回答有難うございます。
教えて頂いたことを検証している最中ですが、進捗だけ報告させてください。
下記の設定変更で警告は出なくなりました。一致させるには、ソリューションエクスプローラーでセットアッププロジェクトを右クリックして、表示->起動条件をえらんで、表示された画面の起動条件にある.NetFrameworkを選択し、プロパティウィンドウにあるVersionのドロップダウンから2.0を選びます。
下記の設定変更で作ったアプリのインストールに成功しました。
Web管理ツール->IIS6と互換性のある管理->IisメタベースおよびIIS6構成との互換性にもチェックがいるようです。
とば口で躓いていたので大変助かりました。ありがとうございます。
恐縮ですがカスタム動作に関しましては年末年始に吟味させてください。
再度不明点がございましたらあらためて投稿させていただきます。
- 編集済み ill2 2015年12月29日 1:55