记得以前用过ShellExecute运行过批处理文件,不过控制起来不够细致。今天在做程序的时候发现CreateProcess也能实现对批处理文件的启动,或是直接运行批处理命令。
以下代码可以启动cmd文件:
BOOL CautobuiltView::RunCmdFile(LPCTSTR lpstrCmd)
{
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si,sizeof(si));
si.cb = sizeof(si);
si.hStdInput=GetStdHandle(STD_INPUT_HANDLE);
if(!CreateProcess(NULL,
(LPTSTR)lpstrCmd,
NULL,
NULL,
FALSE,
NULL,
NULL,
NULL,
&si,&pi))
{
AfxMessageBox("不能创建进程");
}
else
{
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
return TRUE;
}
void testcmdfile()
{
CString strformat = "c:\autobuilt\debug\pack.bat c:\autobuilt\debug\cabwiz.exe c:\autobuilt\debug\iviewer.inf F:\CurRel"
RunCmdFile((LPCTSTR)strformat);
}
以下代码可以直接调用cmd命令,而无需通过*.bat文件执行。
testCmdCommandLine()
{
char szCmd[256] = {0};
//删除d盘中的文件夹new1及其子文件夹中所有内容
sprintf(szCmd, "%s%s","cmd.exe /k rmdir /s /q ","d:\\new1");
RunCmdCommandLine(szCmd);
}
BOOL RunCmdCommandLine(LPCTSTR lpstrCmd)
{
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
si.hStdError = (HANDLE)2;
si.hStdInput = (HANDLE)0;
si.hStdOutput = (HANDLE)1;
// si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
CreateProcess(
0,
(LPSTR)lpstrCmd,
0,
0,
TRUE,
0,
0,
0,
&si, &pi);
return TRUE;
}
学c/c++来vc180中文网www.vc180.com
原文链接: https://www.cnblogs.com/fengji/archive/2010/06/14/1758280.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/11820
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!