這個問題困擾了不久時間,但今天終於解決,其實,弄明白之後,很簡單。下面是主要代碼。
//首先注意結構的初始化,否則會報998錯誤
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi;
//運行的程序不顯示輸出
si.dwFlags=STARTF_USESHOWWINDOW;
si.wShowWindow=FALSE;//不顯示窗口
ZeroMemory( &pi, sizeof(pi) );
//核心在於cmdline所代表的可執行程序之前必須加/c,如調用a.exe.將Dos界面的輸出到文本文件a.txt,cmdline的格式爲
"cmd \/c "...\\a.exe \> a.txt"。
BOOL bRet=::CreateProcess(NULL,cmdline,NULL,NULL,FALSE,0,NULL,"C:\\antiword\\",&si,&pi);
//糾錯
int error = GetLastError();
if(bRet)
{
//等待程序結束,然後關閉進程
WaitForSingleObject(pi.hProcess,INFINITE);// Wait until child process exits.
::CloseHandle (pi.hThread);
::CloseHandle (pi.hProcess);
}
else
{
return false;
}
//ok,