CreateProcess返回的句柄与已启动的Chrome.exe不同

时间:2019-02-12 07:26:31

标签: google-chrome winapi createprocess

我正在使用CreateProcess并将Chrome.exe作为参数。

我正在处理使用PROCESS_INFORMATION创建的过程的过程,该过程内部具有hProcess

当我使用GetProcessId(handle)打印PID时,得到的PID与任务管理器中显示的PID不同。

我尝试将回调函数设置为在Chrome.exe存在后触发,但是无论如何都会触发。这是预期的(不希望的),因为Chrome.exe PID不同。

似乎当我在Chrome.exe上使用CreateProcess时,chrome需要自由地启动其自己的新进程并使所有控件无效。

我尝试将其与FireFox.exe结合使用,并且效果很好,我得到了指向正确过程的句柄。

是否无法获取我产生的Chrome进程的句柄?

1 个答案:

答案 0 :(得分:4)

您使用CreateProcess()生成的Chrome进程依次生成了自己的子进程,然后终止了自身。您的Firefox并没有这样做,至少在最初没有这样做(Firefox确实将子进程用于浏览器选项卡-大多数现代浏览器都这样做,以确保安全性和稳定性)。

因此,从CreateProcess()获得的Chrome PID /句柄虽然有效,但寿命短,显然对您的需求毫无用处。

但是,一切并没有丢失。您可以收到有关Chrome本身产生的子PID的通知。将您生成的Chrome进程添加到job object,然后使用SetInformationJobObject()将该工作分配给I/O completion port,然后使用GetQueuedCompletionStatus()接收来自工作的事件,尤其是{{ 1}}每当在作业中创建新流程时,JOB_OBJECT_MSG_NEW_PROCESS当作业中的所有流程都结束时。有关更多详细信息,请参见How do I wait until all processes in a job have exited?