[英]How to run a process with ShellExecuteEx as as a child that closes after parent exit?
我需要产生一个需要调用UAC的进程。 我已经阅读了这篇文章: 如何运行需要提升并等待的子进程? 。
不幸的是,我不能像一个真正的孩子那样运行流程。 新进程将作为单独的进程运行,即使在生成器关闭后仍继续运行。 但是我需要它在父母退出时自动关闭(正常退出或由于崩溃或任何其他原因)。
提供的解决方案之一就是为此使用作业。 不幸的是,我无法将用ShellExecuteEx
创建的进程分配给作业。 它返回错误ERROR_ACCESS_DENIED
。 为了解决这个问题,我必须将CREATE_BREAKAWAY_FROM_JOB
传递给CreateProcess
。 这是一个封闭的圈子。 我必须使用ShellExecuteEx
而不是CreateProcess
。
您可以使用外壳动词runas
强制提升。 哪个排除CreateProcess
。 因此,您可以执行以下操作:
ShellExecuteEx
创建子进程。 ShellExecuteEx
返回该子项的进程句柄。 如果要使用作业将流程的生命联系在一起,则需要包括子项的requiresAdministrator
清单选项。 这样,您可以使用CreateProcess
并根据需要指定进程创建标志。
现在,您可能不希望子进程以这种方式表现出来。 如果是这样,那么您仍然可以通过调用CreateProcess
来完成工作。 您需要三个过程:
CreateProcess
并放置在同一工作中。 这里的要点是有两种方法可以强制抬高。 带有清单的静态编译时。 这样就可以使用CreateProcess
。 或与runas
shell动词一起动态使用。 这迫使ShellExecuteEx
。 您声明已被推送到CreateProcess
,因此这意味着使用清单来强制提升。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.