CreateProcess 创建一个子进程,并传入命令参数
时间: 2024-11-06 11:16:40 浏览: 16
VC创建进程CreateProcess的方法
在Windows平台上,`CreateProcess`函数是一个非常强大的工具,它允许你在C++中创建一个子进程,并传递命令及其参数。`CreateProcess`的原型通常看起来像这样:
```cpp
typedef bool ( WINAPI *CREATE_PROCESS_FUNCTION)(LPCTSTR lpApplicationName,
LPCTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
STARTUPINFO* lpStartupInfo,
PROCESS_INFORMATION* piProcessInformation);
```
使用`CreateProcess`的示例代码可能会像下面这样:
```cpp
#include <windows.h>
#include <tchar.h>
STARTUPINFO si = {0};
PROCESS_INFORMATION pi;
// 初始化STARTUPINFO结构
si.cb = sizeof(STARTUPINFO);
si.dwFlags |= STARTF_USESHOWWINDOW; // 设置窗口模式,如SHOWWindow(SW_HIDE)或SW_SHOW
si.wShowWindow = SW_HIDE; // 隐藏窗口
// 指定要执行的命令及参数
TCHAR commandLine[] = _T("cmd.exe /c your_command arg1 arg2");
// 调用CreateProcess
if (!CreateProcess(NULL, // 父进程的命令名,NULL表示当前进程
commandLine, // 子进程的命令行字符串
NULL, // 父进程的安全属性,NULL表示继承当前进程的安全属性
NULL, // 子进程的安全属性,NULL表示继承当前进程的安全属性
TRUE, // 是否继承句柄
0, // 创造新进程的标志,默认为0
NULL, // 环境变量,可以指定lpEnvironment
NULL, // 当前工作目录,可以指定lpCurrentDirectory
&si, // 启动信息
&pi)) { // 进程信息
DWORD exitCode = GetLastError(); // 获取错误代码
// 处理错误...
}
// 等待子进程完成
WaitForSingleObject(pi.hProcess, INFINITE); // 或设置超时时间
GetExitCodeProcess(pi.hProcess, &exitCode);
// 关闭句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
```
这个例子中,我们创建了一个新进程,运行的是`cmd.exe`,并且指定了一个命令行参数(这里用`your_command arg1 arg2`代替)。你需要替换`commandLine`变量里的内容为实际需要执行的命令和参数。
阅读全文