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

问题描述 投票:0回答:1

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

我正在使用PROCESS_INFORMATION创建的过程的句柄,hProcess内部有GetProcessId(handle)

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

我已经尝试设置回调函数在Chrome.exe存在后触发,但无论如何它都会触发。由于Chrome.exe PID不同,因此预期(不需要)。

看起来当我在Chrome.exe上使用CreateProcess时,chrome会自由地启动它自己的新进程并使我的所有控件都无用。

我已经尝试将它与FireFox.exe一起使用它运行良好,我得到了它指向正确进程的句柄。

是否无法获得我生成的Chrome进程的句柄?

google-chrome winapi createprocess
1个回答
4
投票

您使用CreateProcess()生成的Chrome进程反过来会生成自己的子进程,然后自行终止。你的Firefox并没有这样做,至少在最初阶段没有(Firefox确实使用子进程浏览器选项卡 - 大多数现代浏览器都是这样做,以确保安全性和稳定性)。

所以,你从job object获得的Chrome PID /句柄虽然有效,但是它很短暂,对你的需求显而易见。

但是,一切都不会丢失。您可以收到有关Chrome本身产生的子PID的通知。将您生成的Chrome进程添加到SetInformationJobObject(),然后使用I/O completion port将该作业分配给GetQueuedCompletionStatus(),然后使用JOB_OBJECT_MSG_NEW_PROCESS从作业中接收事件,特别是在作业中创建新进程时JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO,以及How do I wait until all processes in a job have exited?工作已经结束。有关详细信息,请参阅qazxswpoi。

© www.soinside.com 2019 - 2024. All rights reserved.