まず、私はC++を初めて使用します。
私は次のことを達成したいと思っています。
- 次のコマンドを実行します:「SampleApp.exe-cftest.xml」
- 非表示モードで実行されるシェルが必要です
- SampleAppが終了するまでC++アプリケーションを待機する必要があります
- SampleAppにX時間以上かかる場合は、プロセスを終了する必要があります
- SampleAppの出力をファイル(sample.log)にパイプしたい
これまでのところ、私は次のものを持っています:
SHELLEXECUTEINFO lpExecInfo;
lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
lpExecInfo.lpFile = L"SampleApp.exe";
lpExecInfo.fMask = SEE_MASK_DOENVSUBST|SEE_MASK_NOCLOSEPROCESS;
lpExecInfo.hwnd = NULL;
lpExecInfo.lpVerb = L"open";
lpExecInfo.lpParameters = L"-cf test.xml";
lpExecInfo.lpDirectory = NULL;
lpExecInfo.nShow = SW_HIDE; // hide shell during execution
lpExecInfo.hInstApp = (HINSTANCE) SE_ERR_DDEFAIL;
ShellExecuteEx(&lpExecInfo);
// wait until the process is finished
if (lpExecInfo.hProcess != NULL)
{
::WaitForSingleObject(lpExecInfo.hProcess, INFINITE);
::CloseHandle(lpExecInfo.hProcess);
}
上記のコードは、出力をファイルにパイプすることを除いてすべてを実現します。ただし、ShellExecuteでは不可能なようです。代わりにCreateProcessを使用する必要があるようです。C ++の経験が豊富な人が、私のコードとパイプ出力に相当するCreateProcessを提供してくれることを願っています。そうでない場合は、少なくとも私がやりたいことが可能であることを確認し、正しい方向に向けてください。
- ありがとう