• ベストアンサー

API関数 GetExitCodeProcess

taka_tetsuの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

>自分でプロセスの終了まで待つ処理はいれてあります。 問題はそっちじゃないんですけど。 関数が異常終了していては取れるわけ無いんですが。 >調べた結果では、 >そのプロセスが終了しているか否かのみしか >判断できないように感じたのですが、 どこからそのような判断を? >指定したプロセスが終了していない場合、終了ステータスとして STILL_ACTIVE が格納されます。 >プロセスが既に終了した場合は、終了ステータスとして次のいずれかが格納されます。 この文章からですか? 終了ステータスというのは >・ExitProcess または TerminateProcess 関数で指定した終了コード。 > >・プロセスの main または WinMain 関数の戻り値。 > >・プロセスを終了させた、まだ処理されていない例外の例外コード。 これらのことを終了コードって言うんですよ。 これがほしいんじゃないんですか?

wan-chan
質問者

お礼

補足します。 終了を待つのは、 WaitForSingleObject を使用しています。 その後に、GetExitCodeProcessで終了コードを 取得しようとしていますが、取得できません。

wan-chan
質問者

補足

>どこからそのような判断を? 他の掲示板などで調べた結果です。 終了状態の判定しか出来ないのではないのですか? Shellで起動した場合でも、 そのアプリの終了コードを拾うことが出来るのですか? (GetExitCodeProcessで。) Shellで起動するアプリでは、 コマンドプロンプトで起動すると、 ERRORLEVELに終了コードを返します。 これと同じものをVBで拾いたいのです。

関連するQ&A

  • Process.Startの戻り値を後で取得

    お世話になっております。 作業マシン: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を頼りに、 終了したプロセスの戻り値を突き止める方法も見つからず (発想自体が間違っているかもしれません) 皆様のお力を貸して頂けないでしょうか。何卒よろしくお願いします。

  • VBでのAPI

    いつもお世話になっています。 今回初めて、APIを使うVBのプログラミングをしているんですが、サーバからのファイル名取得でつまずいています。 long型変数 = FtpFindFirstFile(セッション番号, ディレクトリパス, str型変数, 0, 0) って感じで、何かしらファイルが存在するかどうかは戻り値で判定できるのですが、ファイル名自体が取得できません。(複数ファイルが存在するときは、どれか一つのファイル名が取得できれば問題ないです) いろんなサイトを調べたのですが、「引数の文字列変数に"情報"が取得される」ようなふうに書かれており、はっきりしません。ちなみに私の作成中のPGでは、引数の文字列変数は何も格納なれない状態です。 どなたか詳しい方、教えてくれませんか?

  • CreateProcess関数と実行後の戻り値について

    VB6からCで作られたEXEを実行した戻り値を取得したいのですが どのように記述すればよいのでしょうか? 制御が戻るまで固まらずに待ち続けるには CreateProcessを使うと良いとは思いますが、 notepadなど一方的に動作させて終了するようなサンプルしかなく、 戻り値を取得するサンプルは見当たりませんでした。 戻り値といってもCのEXEは結果を標準出力で表示されるものですが・・・ 何か良いサンプルはあるでしょうか? CreateProcessを使わない方法でも構いません。 r = CreateProcess( _ cmd, _ param, _ ByVal 0&, _ ByVal 0&, _ 0, _ NORMAL_PRIORITY_CLASS, _ ByVal 0&, _ vbNullString, _ si, _ pi _ )

  • 時間がかかり過ぎたプロセスをキルする方法

    system関数を用いて、ループ内で外部プログラムを連続的に実行しています。ところが、時々、無限ループに近い状態に陥ってしまうデータがあるので、時間制限を設けて、その時間内に終了しない場合には、そのプロセス(外部プログラム)を強制終了させたいのです。 また、もし、強制終了させた場合には、それと分かるように戻り値を返してもらえると、なお良いです。 この仕組みを実現する手法、もしくは、モジュール等を教えて頂けないでしょうか。

    • ベストアンサー
    • Perl
  • API のString型戻り値について

    現在、VB6.0からVB.NETへ移行中です。 iniファイルから文字列を取得するAPI GetPrivateProfileString?を使用する上でわからない所があります。 GetPrivateProfileString <引数> lpAppName:セクション名 lpKeyName:キー名 lpDefault:キーが見つからなかった場合のデフォルトの文字列 lpReturnedString:取得した文字列が入る nSize:同、文字数 inifilename:INIファイル名 @戻り値@ 取得した文字列 で、VB6.0では、lpReturnedStringにはnSizeで指定したバッファ分戻ってきたのですが、(空文字列で埋めてそのバッファ分を返していた) VB.NETでは、指定したバッファ分ではなく、文字数分のみかえってきてしまいます。しかも、文字列AAAだとすると、"AAA だけで、後ろの " が抜けてしまう状態です。 どうすればいいかご存知の方、教えてください!

  • .NETアプリケーションの戻り値

    .NET(C#)のコンソールアプリケーションを起動し、動作中にタスクマネージャから強制終了したときの戻り値について教えてください。 以下のサイト http://blogs.timberlandchapel.com/blogs/timberlandchapel/archive/2006/06/28/838.aspx には、強制終了時の戻り値は「-1073741510」とありました。 ところが実際にサンプルPGを作ってやってみたところ、戻り値は「1」となります。 PG的には単純にMainの中でSleepの1行だけしか書いておらず、 Sleep中にタスクマネージャからプロセスを終了しています。 サンプルPGの呼出は.batのファイルからです。 (1)事実として「1」が戻ってきているのですが、それが正しいのでしょうか? 正しいとして、何かドキュメントなど情報はありますでしょうか? (2)強制終了時に「-1073741510」を返すようにすることは可能でしょうか? ■環境 Windows Server 2003(x86) / Windows 7(x86) .NET 3.5 SP1

  • JSの高階関数とは?

    高階関数とは? 「関数を引数、戻り値として扱う関数」のことを高階関数と呼びます。 と聞いたのですが、関数が他の関数の引数として、ないしは戻り値とし使われている場合その引数、戻り値の関数のことを高階関数というのでしょうか? するとコールバック関数は引数として関数を使う場合のようですが、半分被りますよね?

  • pidからstatusを得るAPI

    「ps -l」コマンドで出来る事を、 プログラム中から行いたいのですが、 プロセスIDから「S」とか「Z」とかの プロセス状態を得るAPIって 有りますでしょうか? よろしくお願いします。

  • FindWindowの戻り値が違う!?

    いつもお世話になっております。 FindWindowの戻り値についてご教授願います。 ret = FindWindow(NULL,"sample"); 上記を実行した場合、取得する画面がアクティブの時と非アクティブの時でFindWindowの戻り値が違うのは何故でしょうか? 私は、sample画面が非アクティブでもアクティブ状態の時と同じハンドルが取得したのですが、良い方法は有りますでしょうか? 取得画面タイトル:sample 実行ファイル名:sample.exe 実行環境:WindowsXP 開発環境:VC++ 6.0

  • main関数の戻り値について

    c言語において、main関数の戻り値は何を意味しているのですか。 また、void型にすれば、main関数の戻り値を書かなくても問題無いでしょうか。 また、関数はreturn文を書かなくても、最後まで処理を実行すると終了するらしいですが、void型にすれば、main関数でreturn文を書かなくても問題無いでしょうか。