cmdでコマンドを実行するためにCreateprocessを使用していますが、GetExitCodeProcess()を使用してその特定のコマンド実行の終了コードを取得しようとしています。Windowsでcmdを実行した後に終了コードを取得する方法C++
コマンドウィンドウが開いていて、GetExitCodeProcess()を試してみると、259(STILL_ACTIVE)の戻りコードが常に得られます。 TerminateProcess()を使用してプロセスを終了しようとすると、プロセスを終了するために送信した値が終了コードになります。以下は
は私のコードです:
STARTUPINFO si;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
BOOL b = CreateProcess("C:\\Windows\\System32\\cmd.exe","/k dir",NULL,NULL,TRUE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi);
TerminateProcess(pi.hProcess,1);
DWORD dwExitCode = 0;
::GetExitCodeProcess(pi.hProcess, &dwExitCode);
i「は/ k個のdirancbdf」(任意のノンイグジストコマンド)を渡した場合、私は、コマンドとゼロのエラーコードとして「/ k個のディレクトリ」を渡すときに私は0以外のエラーコードを取得する必要があります。
Terminateprocessを使用する別の理由は、そのコマンドの成功/失敗に基づいてコマンドプロンプトを非表示にすることです。
ありがとうございます。
[TerminateProcess'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms686714(v = vs.85).aspx)は、実際にアプリケーションを終了しようとします。まだ終了していない場合でも、また、*非同期*です!詳細については、リンク先のリファレンスをお読みください。 –
ここでは何を達成しようとしているのかは分かりませんが、 '/ k'ではなく'/c'を使用し、 'CREATE_NEW_CONSOLE'フラグは省略してください。まだコンソールがない場合は、最初にコンソールを作成する必要があります。 –
@Someprogrammerdudeはい、私はそれを知っています。 TerminateProcessを使用せずに終了コードを取得しようとすると、私はいつも259(STILL_ACTIVE)を取得します。それに代わるものは何ですか? –