使用system()函数可快速调用外部exe,如system("notepad.exe"),优点是跨平台且简单,但安全性低且阻塞主线程;2. Windows平台推荐使用CreateProcess(),能精确控制进程启动并获取状态,示例中通过STARTUPINFO和PROCESS_INFORMATION结构体配置并启动记事本程序,功能强大且灵活。

在C++中调用外部exe程序有多种方式,适用于不同的场景和需求。以下介绍几种常用且有效的方法,帮助你在程序中执行外部可执行文件。
1. 使用 system() 函数
system() 是最简单直接的方式,它通过调用操作系统的命令行来执行外部程序。
示例:#includeint main() { system("notepad.exe"); // 打开记事本 return 0; }
优点是代码简洁,跨平台(在Windows、Linux等系统上都有对应实现)。缺点是安全性较低,无法获取进程详细状态,且会阻塞主线程直到外部程序关闭。
2. 使用 Win32 API(Windows平台)
在Windows下,可以使用 CreateProcess() 函数精确控制外部程序的启动过程。
立即学习“C++免费学习笔记(深入)”;
示例:#include#include int main() { STARTUPINFO si = {0}; PROCESS_INFORMATION pi = {0}; si.cb = sizeof(si); if (CreateProcess( L"C:\\Windows\\System32\\notepad.exe", // 程序路径 NULL, NULL, // 进程安全属性 NULL, // 线程安全属性 FALSE, // 是否继承句柄 0, // 创建标志 NULL, // 环境变量 NULL, // 当前目录 &si, &pi)) { std::cout << "程序已启动\n"; WaitForSingleObject(pi.hProcess, INFINITE); // 等待程序结束 CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } else { std::cout << "启动失败\n"; } return 0; }
这种方式更灵活,能获取进程句柄、等待执行完成、设置工作目录、隐藏窗口等。适合需要精细控制的场景。
3. 使用 ShellExecute() 或 ShellExecuteEx()
ShellExecute() 是另一个Windows API,更适合打开文件或URL,也能启动exe。
示例:#includeint main() { HINSTANCE result = ShellExecute(NULL, "open", "notepad.exe", NULL, NULL, SW_SHOW); if ((intptr_t)result > 32) { // 成功 } else { // 失败 } return 0; }
比 CreateProcess 简单,常用于“打开”某个程序或文档,支持以管理员身份运行(通过 ShellExecuteEx 配置)。
4. 跨平台封装建议
如果项目需要跨平台兼容,可以做条件编译:
#ifdef _WIN32
system("notepad.exe");
#else
system("gedit"); // Linux 示例
#endif
或者封装一个函数,根据不同平台调用对应API。
基本上就这些常见方法。选择哪种取决于你是否需要控制权限、等待结束、隐藏窗口或跨平台支持。system 最快上手,CreateProcess 更强大。










