
お世話になっております。
作業マシン:WINDOWS Server2008 (仮想)
開発ツール:VWD2010(VB)
使用DB:SQLServer2008R2
にて、Webアプリを開発しております。
ASP.NET開発の経験はおおよそ1ヶ月半程です。
現在、Process.Startで外部exeを実行しております。
この外部実行ファイルは3分くらい掛かる処理で、
WaitForExit() で結果を待たずに
次の画面(待機用画面)に遷移しています。
処理が終了したら、待機画面から結果画面へと遷移させたいのですが、
プロセスの完了と、その結果(戻り値)を、
Process.Startをコールした画面以外で受け取る事が出来るのでしょうか。
WaitForExitを使用するならば、
素直に終了を待ち、終了後にExitCodeを取得、
Ret = Process.Start() で戻り値も取得できましたが…
WaitForExit( ) をしない場合、どのようにして取得できるのでしょうか。
http://dobon.net/vb/dotnet/process/openfile.html
こちら等、Process.Start 非同期 などのキーワードで出てくるのは
Processを実行した同画面内での待機のケースが多く、
今自分が遭遇しているケースに応用するには
どうにも自分の理解が追いつけず質問いたします。
実行する画面でプロセスIDを取得し、セッションに持たせ、
終了を判断したい画面でプロセスIDを元にチェックをする…
と言うことも考えてみましたが、プロセスIDを頼りに、
終了したプロセスの戻り値を突き止める方法も見つからず
(発想自体が間違っているかもしれません)
皆様のお力を貸して頂けないでしょうか。何卒よろしくお願いします。
No.2ベストアンサー
- 回答日時:
案1)
Process.Startの戻り値をSessionに保持する。
→ SessionがInProcモード以外だと問題
(案2)
(sessionID, Process)の組み合わせを独自の辞書で管理する。
// (sessionID, Process)の組み合わせを保持する辞書
private static Dictionary<string, Process> dic = new Dictionary<string, Process>();
→ Processクラスを別のPageスレッドで参照していいのか? MSDNではスレッドセーフが保障されない。
(案3)
別スレッドでEXEを起動する。
(sessionID, ExitCode)の組み合わせを独自の辞書で管理する。
public static class MyProcess
{
// (sessionID, ExitCode)の組み合わせを保持する辞書
private static Dictionary<string, int> dic = new Dictionary<string, int>();
public static void Start(string sessionID, ProcessStartInfo info)
{
dic[sessionID] = int.MinValue; //待機中
//Pageスレッドと別スレッドでEXEを起動
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += delegate {
Process p = Process.Start(info);
p.WaitForExit();
dic[sessionID] = p.ExitCode;
};
bw.RunWorkerAsync();
}
public static int? GetExitCode(string sessionID)
{
if (dic.ContainsKey(sessionID))
return dic[sessionID]; //int.MinValue:待機中, 以外:終了コード
else
return null; //未起動
}
public static void Clear(string sessionID)
{
if (dic.ContainsKey(sessionID))
dic.Remove(sessionID);
}
}
(案4)
(sessionID, ExitCode)の組み合わせをデータベースで管理する。
todo36様、ありがとうございます。
簡単なのは1,4
許される条件によっては2,3、でしょうか。
そもそもの考え方から外れていまして、
どつぼに嵌っていたので本当に助かりました。
おかげさまで目的の結果を受け取る事が出来ています。
ありがとうございました。
No.1
- 回答日時:
> WaitForExit( ) をしない場合、どのようにして取得できるのでしょうか。
Profess.Startを利用する限り、これ以外の方法はないと思います。
ASP.NETの中で非同期に処理を実行するための仕組み、というものが存在しています。
この仕組を利用して、外部の処理にあたる部分をどう組み込んでいったらいいか、というように考えていったほうがいいと思います。
ONOS様、いつもありがとうございます。
Process.Startで実行した処理の結果をどうとるかではなく、
そもそもの呼び方から考えるべきだったのですね。
具体的な方法の例を他の回答者様からも頂き、
何とか実現できそうです。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
C#でのbatファイル実行結果取得
その他(プログラミング・Web制作)
-
exe間での引き値の受け取り方法
Visual Basic(VBA)
-
VB.NETで他のEXEを実行させる
Visual Basic(VBA)
-
-
4
VB.Netでファイル圧縮する方法は何ですか?
Visual Basic(VBA)
-
5
VB.net 任意の例外を発生させるには・・・
Visual Basic(VBA)
-
6
ファイルを処理中に次の処理に移ってしまうようなのですが、、
Visual Basic(VBA)
-
7
Hideについて(.NET)
Visual Basic(VBA)
-
8
VB.netでShellExecuteがしたい
Visual Basic(VBA)
-
9
VBでファイルが開かれているかどうかを確認したい
Visual Basic(VBA)
-
10
SPREAD(GrapeCity)のセルにフォーカスを設定するにはどうしたらいいのでしょうか?
Visual Basic(VBA)
-
11
フォーム上のすべてのTextBoxを空にしたい
Visual Basic(VBA)
-
12
コンソールアプリケーションのコマンドプロンプト画面を非表示
Visual Basic(VBA)
-
13
VB.NET 自プログラムのプロセス終了のイベント
Visual Basic(VBA)
-
14
DoEventsがやはり分からない
Visual Basic(VBA)
-
15
外部exeに対しての引数受け渡し
Visual Basic(VBA)
-
16
VB2010でExcelの行をコピーして挿入する
Visual Basic(VBA)
-
17
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
18
VB.net
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タスクマネージャーのプロセス...
-
指定した実行中プロセスの、指...
-
Process.Startの戻り値を後で取得
-
Shellでの環境変数
-
GPLによるソース公開の回避方法
-
バックグラウンドのプロセスの...
-
【C#】別プロセスがロックか...
-
DLLにおいて、最後のプロセスデ...
-
共有メモリを使う場合のCPU負荷...
-
iPodの取り外しの際のエラーメ...
-
execvpでのcdコマンドについて。
-
Macターミナルで実行中のプログ...
-
家電製品の電力周波数を変える機械
-
TCP/IP通信時のサーバーからの受信
-
このレジの並び方は間違ってま...
-
InternetOpenUrlの引数URL文字...
-
実行時のコマンドプロンプトを...
-
ボタンが押された事を検知する...
-
h8マイコンで AD変換ができ...
-
割り込みの衝突
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
プロセスのアタッチ・デタッチ...
-
非表示になったエクセルは?
-
C#でのbatファイル実行結果取得
-
Process.Startの戻り値を後で取得
-
タスクマネージャーのプロセス...
-
SendMessageが失敗するときがある
-
VB6.0 SHELLで起動...
-
Linuxでのスレッド間メッセージ...
-
vb.netでEXCEL起動がうまくでき...
-
explorer.exeが異様にメモリを食う
-
プロセスIDの取得方法について
-
IISがフリーズ
-
jdbcのプロセスの処理について
-
c言語でプロセスIDを調べたい
-
セマフォとmutexの違いは?
-
警告『 別のプロセスで使用され...
-
ADOでアクセスのレコードに...
-
OSPFでプロセスを分ける意義に...
-
Windowsでのfork方法
おすすめ情報