【发布时间】:2017-05-23 11:37:30
【问题描述】:
在 Windows 10 中,如果我首先创建一个打开 calc.exe 的进程,它会触发 calc.exe,然后退出该进程,然后它会打开calculator.exe。我怎样才能获得在任务管理器中显示的实际进程 ID。 我正在使用以下代码来创建进程并显示进程 ID
if(!CreateProcess(("C:\\WINDOWS\\system32\\calc.exe"),
NULL,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&startup_info,
&pi) )
{
args.GetReturnValue().Set(Nan::New(response).ToLocalChecked());
}
else
{
int dwPid = GetProcessId(pi.hProcess);
int v = dwPid->Int32Value();
args.GetReturnValue().Set(dwPid);
}
【问题讨论】:
-
使用 fork() 方法
-
另外,您希望
dwPid->Int32Value()做什么?变量dwPid已经是int值。作为原始类型的值,它没有成员函数。而且它绝对不是指针。 -
您创建进程
A执行进程B并退出。你问如何得到PID的B。我们可以枚举进程并将PROCESSENTRY32.th32ParentProcessID与PIDa进行比较(不需要关闭A进程的句柄以保持它PIDa)- 这样我们就得到了PIDb。但是如果BexecC然后也退出怎么办。实际计算是C还是A实际计算? -
这正是
CreateProcess的作用所做的!调用CreateProcess的进程将成为父进程,而新进程是子进程。并且子进程与父进程分开运行。所以我看不出问题出在哪里。也许它与CreateProcess函数无关,但与其他东西有关?就像例如如何将值“返回”给 Node?span> -
据我所记得(从之前想要枚举进程子进程的问题),进程/系统不跟踪子进程(进程的),只有进程的父进程。你会 - 我认为 - 必须枚举进程 ID 并将父进程追回你想要的那个(这可能是 PS 脚本所做的)但你必须在 CALC.EXE 终止之前这样做(由此时间将与您的流程无关)。
标签: c++ visual-c++ windows-10 createprocess