C++ 运行外部程序传入参数不显示命令框,父进程结束启动的外部程序不结束
时间: 2023-07-16 15:15:31 浏览: 88
在 C++ 中运行外部程序可以使用 `system` 或者 `CreateProcess` 函数。如果要隐藏命令框,可以使用 `CreateProcess` 函数并设置 `STARTUPINFO` 结构体中的 `wShowWindow` 字段为 `SW_HIDE`。示例如下:
```c++
#include <windows.h>
#include <stdio.h>
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// 设置 STARTUPINFO 结构体
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
// 启动外部程序
if (!CreateProcess(NULL, "notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
printf("CreateProcess failed (%d).\n", GetLastError());
return 1;
}
// 等待外部程序结束
WaitForSingleObject(pi.hProcess, INFINITE);
// 关闭句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
```
如果父进程结束启动的外部程序不结束,可能是因为父进程没有等待子进程结束。可以使用 `WaitForSingleObject` 或者 `WaitForMultipleObjects` 函数等待子进程结束。示例如下:
```c++
#include <windows.h>
#include <stdio.h>
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// 设置 STARTUPINFO 结构体
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
// 启动外部程序
if (!CreateProcess(NULL, "notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
printf("CreateProcess failed (%d).\n", GetLastError());
return 1;
}
// 等待外部程序结束
WaitForSingleObject(pi.hProcess, INFINITE);
// 关闭句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
```
阅读全文