我有一個Windows服務(在WinXP SP2下),在LocalSystem帳戶下運行,使用CreateProcessWithLogonW啓動進程。爲了清理子進程,我試圖使用一個作業對象和TerminateJobObject。CreateProcessWithLogonW和AssignProcessToJobObject
MSDN指出作業句柄必須具有JOB_OBJECT_ASSIGN_PROCESS訪問權限,因爲它是通過CreateJobObject創建的。進程句柄必須具有PROCESS_SET_QUOTA和PROCESS_TERMINATE權限。我認爲它有它們,因爲TerminateProcess和SetProcessWorkingSetSize都返回沒有錯誤。
雖然,AssignProcessToJobObject失敗,錯誤5(拒絕訪問)。如果我用一個簡單的CreateProcess替換CreateProcessWithLogonW,一切正常。
我錯過了什麼,或者是我想要做的事情嗎?
編輯:似乎svchost.exe,實際上創建進程CreateProcessWithLogonW時使用,已分配進程到匿名作業。此函數忽略CREATE_CREAKAWAY_FROM_JOB標誌。所以真正的問題是:有沒有辦法阻止svnhost將進程分配給工作?
實際上,我們需要一組固定的登錄名,所以我可以在每次登錄CreateProcess時使用這種方法。感謝你的回答。 – fraca7 2009-08-17 13:46:15
我遇到了完全相同的問題。我的方式來解決它 - 如你所建議 - 創建第三個過程。謝謝。 – 2014-04-19 18:20:17