首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

调用CMD创建进程!求啊该如何解决

2012-04-23 
调用CMD创建进程!!!急求啊!C/C++ codevoid CSurveyDataExamine::RunCMD(){CString strCMD cmd.exeSEC

调用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一下,匿名管道

热点排行