我需要產生一個需要調用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對象中。 –
如果您不希望父進程等待「孩子」,請不要。等待啓動的進程退出不是默認狀態。 –