Мне нужно создать процесс, который нужно вызвать UAC. Я прочитал этот пост: How can I run a child process that requires elevation and wait?.Как запустить процесс с помощью ShellExecuteEx как дочернего, который закрывается после выхода из родителя?
К сожалению, я не могу запустить процесс как real ребенок. Новый процесс запускается как отдельный и продолжает работать даже после закрытия spawner. Но мне нужно, чтобы он автоматически закрывался, когда родительский выход (нормальный выход или сбой или любая другая причина).
Одним из решений, которые были предоставлены, является использование рабочих мест для этого. К сожалению, я не могу назначить процесс, созданный с заданием ShellExecuteEx
. Он возвращает мне ошибку ERROR_ACCESS_DENIED
. Чтобы справиться с этим, я должен пройти CREATE_BREAKAWAY_FROM_JOB
до CreateProcess
. И это замкнутый круг. Я должен использовать ShellExecuteEx
, но не CreateProcess
.
Ядро Windows не приписывает какой-либо конкретный смысл * дочернему процессу *, за исключением наследования дескриптора. В частности, нет никакой зависимости от времени жизни процесса (если явно не реализовано). – IInspectable
Windows действительно не заботится о взаимоотношениях между родителями и дочерними процессами между процессами. Процессы независимы друг от друга. Да, возможно * узнать, какой процесс породил другой процесс (Windows отслеживает эту информацию за кулисами), но это не очень полезная информация для кода пользователя в средах Windows. Что именно вы пытаетесь решить путем «запуска процесса как ребенка»? Просто создайте новый процесс и сделайте с ним.Вопрос MK, связанный с вами, указывает вам, как связывать процессы вместе, если вы должны их убить вместе - поместите их в один и тот же объект Job вместе. –
Если вы не хотите, чтобы родительский процесс ждал «ребенка», не делайте этого. Ожидание запуска процесса для выхода не является состоянием по умолчанию. –