有详细介绍的博客:
C++执行外部程序(调用外部exe程序) - JavaShuo
C++调用外部应用程序的方法的整理总结(常用) (shuzhiduo.com)
我这里主要总结下几种方法的优缺点
前面三种方法,相对简单,但是使用也有局限,方法四相对复杂,但是灵活性高,能满足多种需求。System、ShellExecute和WinExec命令用于简单的作业。如果要完全控制一个新进程,就必须调用CreateProcess。
方法1. WinExec
WinExec()函数的作⽤是执⾏指定的程序。
使用示例:WinExec("e:\\1.exe", SW_SHOW);
方法2. System
system函数已经被收录在标准c库中,头文件为<stdlib.h>
使用示例:system("D:\\main.exe");
缺点:会有命令行窗口
方法3. ShellExecute
ShellExecute不只能够运行exe文件,也能够运行已经关联的文件
ShellExecute是异步执行的,不管执行的程序是否成功运行,运行的时间是长是短,ShellExecute函数都会立即返回
HINSTANCE hNewExe = ShellExecuteA(NULL, "open", "d:\\test.log", NULL, NULL, SW_SHOW);
方法4. CreateProcess
CreateProcess()函数的作⽤是在主线程中创建新的进程。
使用示例:
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = TRUE;
BOOL bRet = CreateProcess(NULL, const_cast<LPTSTR>(pre_cmd_line.c_str()), NULL,
NULL, FALSE, CREATE_NO_WINDOW, NULL,
const_cast<LPTSTR(cmd_directory_line.c_str()), &si, &pi);
if (bRet)
{
// 不使用的句柄最好关掉
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
pi.hProcess = NULL;
pi.hThread = NULL;
pi.dwProcessId = 0;
pi.dwThreadId = 0;
}