调用CMD创建进程!!!急求啊!
- C/C++ code
void CSurveyDataExamine::RunCMD(){ CString strCMD = "cmd.exe"; SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE};// HANDLE stdInput;// 管道读句柄 HANDLE toInput;// 管道写句柄 HANDLE stdOutput; CreatePipe(&stdInput, &toInput, &sa, 0);//创建匿名管道,该函数在创建匿名管道的同时返回两个句柄:管道读句柄和管道写句柄 stdOutput = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出的句柄, 命令行的程序会把字符输出到屏幕上 LPTSTR lpCMD = (LPTSTR)(LPCTSTR)strCMD; STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si, 0, sizeof(si)); si.cb = sizeof(si); si.dwFlags =/* STARTF_USESTDHANDLES |*/ STARTF_USESHOWWINDOW ; si.hStdError = stdOutput;//用于标识控制台窗口的缓存 si.hStdInput = stdInput; //用于设定供控制台输入和输出用的缓存的句柄 si.hStdOutput = stdOutput;//用于标识控制台窗口的缓存 si.wShowWindow = SW_SHOW; CreateProcess(NULL, lpCMD, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);//父进程可以调用进程创建函数CreateProcess()生成子进程 //对你的父进程来说,就是stdout //写入命令 char szCmdLine[1024] = "d:\\teqc\\h2161080.11o \r\n"; //char szCmdLine[1024] = "dir\r\n"; DWORD bytesWritten; BOOL bWriteOk = WriteFile(toInput,szCmdLine, (int)strlen(szCmdLine)+1, &bytesWritten, NULL); CloseHandle(toInput); CloseHandle(stdOutput); CloseHandle(stdInput);}
这个代码用来打开CMD,并且在里面输入"d:\\teqc\\h2161080.11o \r\n",打开d:\\teqc\\h2161080.11o这个文件。调试时候
通道创建,还有WriteFile函数,显示都是成功的,而且bytesWritten返回存在被写入的字符。但是CMD窗口没什么反应,文件也没有代开。请问这是什么问题啊 !我是刚接触CMD调用,新手,希望各位大神帮帮忙啊!本人新手分不多,希望大家谅解啊!
[解决办法]
你这用的是匿名管道吧,可以参考这篇文章:
http://blog.csdn.net/morewindows/article/details/7390441
[解决办法]
Mark一下,匿名管道