ASP.NET Webフォームにて、シャットダウンした機械を遠隔で起動させる社内用のWebサイトを作成しています。
その際に「要求された情報を決定する前にプロセスを終了する必要があります」というエラーメッセージが表示されてしまい、解決の方法が分からず困っています。
####開発環境
OS:Windows 10 Pro (1909)
ツール:Visual Studio 2017 (「ASP.NET Webアプリケーション(.NET Framework)」から「Webフォーム」を選択して使用)
データベース:Microsoft Access Database (.accdb)
####ソース
※こちらの判断で「重要ではない」としたソースは一部省略してあります。
SetupUser.aspx(body部分のみ抜粋)
ASPX
1<body> 2 <form id="form1" runat="server"> 3 <table> 4 <tr> 5 <th>ユーザー選択</th> 6 <td> 7 <asp:DropDownList ID="List1" runat="server" DataSourceID="Source1" DataTextField="Name" DataValueField="Id"> 8 </asp:DropDownList> 9 <asp:SqlDataSource ID="Source1" runat="server" SelectCommand="SELECT [Name], [Id] FROM [Table1]"> 10 </asp:SqlDataSource> 11 </td> 12 </tr> 13 <tr> 14 <td> 15 <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click"/> 16 </td> 17 </tr> 18 <tr> 19 <td> 20 <asp:Label ID="Label1" runat="server" Text=""></asp:Label> 21 </td> 22 </tr> 23 </table> 24 </form> 25</body>
SetupUser.aspx.cs
C#
1using System.Collections.Generic; 2using System.Linq; 3using System.Web; 4using System.Web.UI; 5using System.Web.UI.WebControls; 6using System.Drawing; 7using System.Diagnostics; 8 9public partial class Class1 : Page 10{ 11 protected void Page_Load(object sender, EventArgs e) { } 12 13 protected void Button1_Click(object sender, EventArgs e) 14 { 15 var param = DropDownList1.SelectedValue; 16 var proc = Process.Start("C:\test.exe", param); // Webサーバー内のexeを起動 17 if (proc == null) // エラーメッセージを画面に表示 18 Label1.Text = "エラーが発生しました。"; 19 else 20 { 21 proc.WaitForExit(); // プロセスが終了するのを待つ 22 23 var ecode = proc.ExitCode; // エラーコード取得 24 if (ecode == 0) // エラーコードが0なら正常終了 25 Label1.Text = "起動できた模様です。"; 26 else // それ以外なら簡単なエラーメッセージを表示 27 Label1.Text = $"以下のエラーコードが返送されました:{ecode}"; 28 } 29 } 30}
データベースから取得した情報をセレクトボックス形式で表示させ、その中から選択されたユーザー情報を用いて別のマシンを遠隔起動させます。「Test.exe」は実際にマシンの起動を行うアプリで自作のアプリですが、私が作ったわけでないので実際にどういう処理が行われているかまでは把握できていません。
####運用環境
OS:Windows Server 2012 Standard
先程のWebフォームをこちらの機械に設定したIISに組み込みました。もともとの「Default Web Site」をローカルパスを今回のファイルパスへ変更する形で使用しています。
####現象
ユーザー情報を選択してボタンを押下し、Button1_Click
関数を動かすと以下のようなエラー画面が表示されます。
#####'/'アプリケーションでサーバーエラーが発生しました。
要求された情報を決定する前にプロセスを終了させる必要があります。
スタックトレース:
[InvalidOperationException: 要求された情報を決定する前にプロセスを終了させる必要があります。]
System.Diagnostics.Process.EnsureState(State state) +8292424
System.Diagnostics.Process.get_ExitCode() +22
WebForm1.Setup.Button1_Click(object sender, EventArgs e) in C:\Users...\SetupUser.aspx.cs:27
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +11594496
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +274
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1964
上の画面内にある「C:\Users...\SetupUser.aspx.cs」は開発環境におけるSetupUser.aspx.csファイルのフルパスです。ちなみにブラウザにエラー画面は表示されますが、マシンの遠隔起動自体は成功している模様です。また開発環境にてデバッグで動かしたときは上記のようなエラーは発生せず、正常に処理を終了しました。
スタックトレースを見る限り、SetupUser.aspx.csファイルのvar ecode = proc.ExitCode;
の箇所で何らかのエラーが発生しているのは素人目でもわかるのですが、これをどう解決したらいいのか分かりません。どなたかご教示お願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/08 00:53 編集