我正在使用CreateProcess并将Chrome.exe作为参数。
我正在处理使用PROCESS_INFORMATION
创建的过程的过程,该过程内部具有hProcess
当我使用GetProcessId(handle)
打印PID时,得到的PID与任务管理器中显示的PID不同。
我尝试将回调函数设置为在Chrome.exe存在后触发,但是无论如何都会触发。这是预期的(不希望的),因为Chrome.exe PID不同。
似乎当我在Chrome.exe上使用CreateProcess时,chrome需要自由地启动其自己的新进程并使所有控件无效。
我尝试将其与FireFox.exe结合使用,并且效果很好,我得到了指向正确过程的句柄。
是否无法获取我产生的Chrome进程的句柄?
答案 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?。