我需要产生一个需要调用UAC的进程。我看过这篇文章:How can I run a child process that requires elevation and wait?。如何使用ShellExecuteEx作为父级退出后关闭的子级运行进程?
不幸的是我不能运行一个进程real孩子。新过程作为单独运行并且在产卵器关闭后继续运行。但是当父母退出时(正常退出或崩溃或其他原因),我需要它自动关闭。
提供的解决方案之一是使用作业。不幸的是,我不能将一个用ShellExecuteEx
创建的进程分配给一份工作。它返回给我一个错误ERROR_ACCESS_DENIED
。为了解决这个问题,我必须通过CREATE_BREAKAWAY_FROM_JOB
到CreateProcess
。这是封闭的圈子。我必须使用ShellExecuteEx
而不是CreateProcess
。
Windows内核不会将任何特定的含义赋予*子进程*,但不包括句柄继承。特别是在过程寿命方面没有关系(除非明确实施)。 – IInspectable
Windows并不关心进程之间的父/子关系。进程是彼此独立的。是的,它可以*知道哪个进程产生了另一个进程(Windows会在后台跟踪该信息),但它对于Windows环境中的用户代码并不是真正有用的信息。作为一个孩子运行一个流程,你究竟想要解决什么问题?只是产生一个新的过程,并完成它。MK链接的问题告诉你如何将过程链接在一起,如果你必须能够一起杀死它们 - 将它们放在同一个Job对象中。 –
如果您不希望父进程等待“孩子”,请不要。等待启动的进程退出不是默认状态。 –