c++ - System() 启动进程,但使用 CreateProcess 失败?

标签 c++ windows process

所以,奇怪的问题是,我正在尝试创建一个进程,然后恢复它,主要是探索 Windows API。我注意到如果我这样做:

system("C:\\Windows\\System32\\calc.exe");

它将打开一个计算器 exe,但是如果我尝试使用 CreateProcessA 做同样的事情,我会得到这个:

STARTUPINFO starting_info;
PROCESS_INFORMATION process_info;

// let's try and make a process
if (!CreateProcessA(NULL, "C:\\Windows\\System32\\calc.exe", NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &starting_info, &process_info)) {
    return;
}
// resume thread
NtResumeThread(process_info.hThread, NULL);

出于某种原因,这在大多数情况下会在“创建”进程时引发错误 0xc0000142,否则就会失败。

这是怎么回事?

最佳答案

请参阅以下用于创建进程的 MSDN 示例代码: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx

你需要将 sipi 结构清零,同时设置

si.cb = sizeof(si);

最后,关闭进程和线程句柄。

CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

关于c++ - System() 启动进程,但使用 CreateProcess 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35350258/

相关文章:

c++计算编译时间常数,同时防止整数常数溢出

windows - 批处理文件提取字符串部分

c - "Undefined reference to mknod "如何解决?

windows - Windows 服务可以接收 Windows 消息吗?

java - Android后台进程检查

c++ - QSettings 不区分字符串和整数值

c++ - 在 C++ 中从可执行路径(或从 hWnd,或从 pid)获取程序名

java catch 进程时间实时进度条

php - 登录Symfony2后运行控制台命令后台

c++ - 如何将指向 "DEFINED"常量的指针传递给 C 中的函数?