• 締切済み

CreateProcessで起動したアプリの監視

はじめまして、E46-M3と申します。 さっそくですが、CreateProcessを使って他の プログラムを起動した際、その起動したプログラムを 監視することは出来ないのでしょうか? 具体的に言いますと、 CreateProcessで起動させたプログラムが 終了したか、していないか または、異常終了したか などの判断をしたいのですが・・・ どなたかご存知な方がいましたら 是非教えて下さい。よろしくお願いします。

みんなの回答

回答No.1

GetExitCodeProcessで調べましょう。 プロセスハンドルはCreateProcessからもらってますよね。

E46-M3
質問者

お礼

うおーっ。 ありがとうございます。うまくいきました。 感謝感謝です。 APIに関してまだ知識が浅いので また、質問する機会があるかと思いますが そのときは、よろしくお願いします。 ありがとうございました!!

関連するQ&A

  • 他アプリの起動

    builderC++を使用してます。 sample.exeを起動した際にもう一つの他アプリ(sample2.exe)を起動させ、 sample.exeを終了した際に一緒に起動したsample2.exeも終了させるコードはどういう風に書けばよろしいですか? WindowsAPIのCreateProcessを使い起動させようとしてます。 ご教授お願いします。

  • CreateProcessについて

    VC++6.0を使用し、NT上で以下のようなプログラムを作成していました。 Prcess_sts = ::CreateProcess(***_FULLPATH, NULL, NULL, NULL, FALSE, 0, NULL, ***_DIR, &pscinfo, &lpProcessInfo ); ***は起動する実行形名称です。作成したプログラムをNT上で動作させるには全く問題なかったのですが、OSがXPに変わった途端、この命令でアプリケーションの起動ができなくなりました。具体的な症状は、 ・カーソルは砂時計を表示し、フリーズしている ・タスクマネージャの『プロセス』を確認すると、99%がアイドル状態で、起動したアプリ及びCallしたアプリがリソースを食い潰している状態ではない。 という変な現象が発生しています。ちなみに、このような状態になるのは、コールしたプログラムの先でシリアル通信を行うものに頻発しているように感じます(気のせいかも?)また、全く問題なく起動することもあります。これはOSのせいなのでしょうか?もちろん、NT上で動作させていたときは全くなかった現象です。VC++がXPに対応していないからなのでしょうか?全く分からずに困っています。その道に明るい方がいましたら、ご教示ください。 PS マイクロソフトが発表している『32ビットプロセスでCreateProcess関数を呼び出しても正しく起動されない』というものとは違うようです。 よろしくお願いします。

  • CreateProcessでアプリが終了しない

    ちょっとした変換ツールを作ろうと思い、ダイアログベースの MFCアプリケーションを作成しました。 OKボタンが押された時にCreateProcess()で子プロセスを 起動して、終了したら結果表示して親プロセスも終了する 様にしようと思ったのですが、結果表示までは正常に 実行されるのですが、親プロセスが終了しません。 恐らくCreateProcess()に渡す引数が悪いのだと思うのですが、 どなたかわかる方がいらしたらご教示願います。 void CMscGenSelectorDlg::OnBnClickedOk() {   STARTUPINFO si;   PROCESS_INFORMATION pi;   ZeroMemory( &si, sizeof si );   si.cb = sizeof si;   ZeroMemory( &pi, sizeof pi );   // 子プロセス起動   CreateProcess(     NULL,                // モジュール名     _T("mscgen.exe -Tpng hoge.msc"),  // コマンドライン     NULL,                // セキュリティ記述子     NULL,                // セキュリティ記述子     FALSE,               // ハンドルの継承オプション     0,                 // 作成のフラグ     NULL,                // 新しい環境ブロック     NULL,                // カレントディレクトリ名     &si,                // スタートアップ情報     &pi);                // プロセス情報   // 子プロセス終了待ち   WaitForSingleObject( pi.hProcess, INFINITE );   CloseHandle( pi.hProcess );   CloseHandle( pi.hThread );   // シーケンスチャート表示   ShellExecute( NULL, _T("open"), _T("hoge.png"), NULL, NULL, SW_SHOW );   // 終了   OnOK(); }

  • CGIでCreateProcess

    vc++でCGIアプリケーションを作成しています。 今回、画面よりボタンクリックされたら、 CreateProcessで某exeを起動することになりました。 が、そのexeは処理時間がかかるため、終了を待たないで 画面出力をしたいのです。 単純に CreateProcessがうまくいったら、GetExitCodeProcesで「終わったか」を チェックしないで画面を出力しています。 が、画面出力が全部終わりません。 画面(html)はトップから出力し、iframeがあります。 表示の最後(</html>の前)にiframe内に一覧リストを表示させるよう、 JavaScriptでリクエストを行っています。 ログを見るとトップの出力までは書かれています。 その後、CreateProcessで起動したexeが終了すると、 一覧リストは表示されます。 ログも追加されています。 ##例えばexeが5分かかるとすると5分後にログが最後まで書かれています) ##画面も5分後に一覧リストが表示されます。 何故、一覧リストの処理が待たされているのかわかりません。 ソースはこんな感じです。   ↓ iRet = CreateProcess(0, Pbuff(ここにexe名), 0, 0, TRUE, 0, 0, 0, &startUpInfo, &PInfo ); if ( iRet != TRUE ){ CgiError("xxx", "起動できませんでした", "" ) ; return(-1); }  //この後画面表示処理 何か設定とか、間違ってますでしょうか? または何か他にしなければならないことがあるでしょうか? アドバイスをお願いいたします! 因みに、CreateProcessで起動するexeは最大2時間程度の処理時間になります。 よろしくお願いします。

  • 別プログラムの終了監視

    VisualBasic6.0で別プログラムの終了を監視することはできませんか? 具体的に言うと、ACCESS2000で作ったアプリケーションからVB6.0で作ったEXEを起動させてそのEXEから起動元のACCESSアプリケーションの終了を監視するというものです。 いろいろやってはいるのですがうまくいきません。 誰か教えてください!

  • CreateProcessでアプリケーションエラー

    先日、こちらでご質問させていただいた者です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2211536 環境は Windows2000 Borland C++BuilderXです。 先日と同様に、 CreateProcessでmodule2.exeを起動しようとしたとき、 module2.exeが立ち上がらない現象が発生したのですが、 その際、下のような内容のエラーポップアップが表示されました。 -------------------------------------------------- module2.exe - アプリケーションエラー アプリケーションを正しく初期化できませんでした(0xc0000142)。 [OK]をクリックしてアプリケーションを終了してください。 -------------------------------------------------- 呼び出し元ではCreateProcessの戻り値を取っており、 エラーが返された場合はエラーログを出力する処理を行っているのですが 現象発生時にはエラーログが出ていなかったことから、 CreateProcessからは成功が返されたように見られます。 今回のようなアプリケーションエラー発生時に、呼び出し元でエラーを検知し エラーログを出力するようにしたいのですが、 どのようにすればよいでしょうか? ご存知の方がいらっしゃいましたら教えてください。 よろしくお願いします。

  • ほかのアプリのフルパス?

    こんばんわ。E46-M3です。 さっそくですが、自身のアプリケーションのフルパスを 取得することは出来たのですが (GetModuleFileName使用) 他の起動中アプリケーションのフルパスを 取得することが出来ません。 どなたかご存知な方いましたら教えて下さい。 具体的なサンプルコード等ありましたら なおうれしいです。よろしくお願い致します。

  • 外部プログラムの起動と監視

    イントラネット内のLinuxサーバにあるプログラムをクライアントPCのブラウザから 起動しそのプログラムが出力するログを一定周期でブラウザに表示して プログラム終了時にはユーザーに知らせたい。 また、プログラムは同時起動が不可能なものとしたい。 PHPなどのCGIスクリプトでは、ブラウザとのセッションが切れてしまえば サーバー側のプログラムは走りっぱなしになってしまいます。 外部プログラムの監視や排他制御を考えると非常に複雑な処理になることが 予想されます。 そこで質問なのですが、サーバーのプログラムの起動と監視をクライアントPCの ブラウザから行いたいのですがJavaの技術を使うことで容易になりますか? また、ブラウザを使わない通信プログラムを作成すれば可能となりますか? 詳しい方がいましたら教えて下さい。宜しくお願い致します。

    • ベストアンサー
    • Java
  • プロセス監視

    VisualBasic6.0でWindows2000上で動くプロセス監視プログラムを開発しています。 監視対象a.exe(仮)を起動させた際に取得したPIDを元に起動状態の監視を行っているのですが、ひとつ気がかりとなっていることがあります。 a.exe(仮)エラー停止直後に、他のプロセスb.exeが起動した際に、a.exe(仮)に割り振られていたPIDがb.exeのプロセスに割り当てられ、プロセス監視プログラムがa.exe(仮)の停止を検知できないという可能性はないでしょうか? WindowsでPID割当ての仕組みにお詳しい方、教えてください。 宜しくお願いします。 尚、a.exe(仮)は起動引数付でマルチ起動させるためプロセス名で起動状態を監視することは出来ません。

  • コンソールアプリの起動結果待ち→WaitForInputIdle??

    こんばんは。 以前にも質問したのですが、CreateProcessで起動させたプログラムの起動を待つために、WaitForInputIdleを使用と教わったのですが、コンソールアプリの起動の場合はWaitForInputIdleは待たずにすぐに結果を返してしまうのです。 WaitForInputIdleと同じようなことができ、かつ、コンソールアプリにも使える方法、ご存知の方がいらっしゃったら、教えてください... よろしくお願いします。

専門家に質問してみよう