CreateProcess 举一个例子,启动程序时传递三个命令参数
时间: 2024-11-06 10:19:54 浏览: 17
`CreateProcess`是Windows API中用于创建新进程并立即启动它的函数。它允许你控制新进程的属性,包括其窗口风格、环境变量以及如何传递命令行参数。以下是一个简单的C++示例,演示了如何使用`CreateProcess`来启动一个新的应用程序,并传递三个命令行参数:
```cpp
#include <windows.h>
// 假设我们要启动的是Notepad.exe,并传入三个参数
const wchar_t* fileName = L"C:\\Windows\\notepad.exe";
wchar_t* arg1 = L"arg1";
wchar_t* arg2 = L"arg2";
wchar_t* arg3 = L"arg3";
STARTUPINFO si;
PROCESS_INFORMATION pi;
// 初始化STARTUPINFO结构体
si.cb = sizeof(si);
si.lpReserved = NULL;
si.lpDesktop = NULL;
si.lpTitle = NULL;
si.dwFlags = STARTF_USESHOWWINDOW; // 设置窗口可见
si.wShowWindow = SW_SHOW; // 窗口显示为最大化
// 创建进程信息结构体
memset(&pi, 0, sizeof(pi));
// 准备命令行参数
wchar_t* commandLine = new wchar_t[wcslen(fileName) + 1 + wcslen(arg1) + 1 + wcslen(arg2) + 1 + wcslen(arg3) + 1];
wcscpy(commandLine, fileName);
wcscat(commandLine, L" ");
wcscat(commandLine, arg1);
wcscat(commandLine, L" ");
wcscat(commandLine, arg2);
wcscat(commandLine, L" ");
wcscat(commandLine, arg3);
// 调用CreateProcess
if (CreateProcess(fileName, // 指定要执行的程序名
commandLine, // 指定命令行参数
NULL, // 父进程的句柄(NULL表示当前进程)
NULL, // 子进程的句柄(NULL表示当前进程)
FALSE, // 是否继承父进程的令牌
0, // 标志(默认值,一般不用修改)
NULL, // 无环境变量
NULL, // 默认工作目录
&si, // 启动信息
&pi)) { // 进程信息
printf("Process created with PID: %d\n", pi.dwProcessId);
} else {
DWORD error = GetLastError(); // 获取错误代码
printf("Failed to create process, error code: %d\n", error);
}
delete[] commandLine; // 释放内存
// 清理过程信息
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
```
这个示例中,我们首先初始化了`STARTUPINFO`结构体,然后构建了一个包含所有命令参数的`commandLine`字符串,最后通过`CreateProcess`函数创建新进程。记得在完成后关闭进程相关的句柄并释放动态分配的内存。
阅读全文