这个问题困扰了不久时间,但今天终于解决,其实,弄明白之后,很简单。下面是主要代码。
//首先注意结构的初始化,否则会报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,