У меня есть исполняемый файл Windows, который запускается из службы, вызывая CreateProcessWithLogonW () с набором указанных сведений о пользователе.
Это работает нормально, и процесс начинается, как и ожидалось. Однако, когда этот процесс пытается запустить другие процессы сам, в настоящее время просто используя CreateProcess (), они запускаются и сразу же умирают - это исполняемые файлы, требующие доступа к рабочему столу.
После прочтения статьи Microsoft о CreateProcess () - http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx
Я думаю, могу понять, почему это происходит, и это имеет смысл в некоторой степени. CreateProcess () знает, что вызывающий процесс олицетворяет пользователя, поэтому он использует родительский процесс, который в данном случае является учетной записью локальной системы. Но, конечно, все, что выполняется в локальной системной учетной записи, не имеет необходимого нам доступа, поэтому запущенный процесс завершается.
Как ни странно, когда я ранее использовал LogonUser () и CreateProcessAsUser () для запуска исходного исполняемого файла внутри службы, он работал нормально. Но мне пришлось изменить это на CreateProcessWithLogonW () из-за проблем с отсутствием правильных привилегий.
Кто-нибудь знает решение этой проблемы? Я видел разговоры об этом где-то в Интернете, но не с каким-то определенным решением. Похоже, мне может понадобиться токен пользователя, с которым я вхожу в CreateProcessWithLogonW (), чтобы я мог использовать его для запуска других процессов позже? Но у меня нет никакого способа получить этот токен, можно ли каким-либо образом получить его для текущего пользователя?
Любая помощь будет принята с благодарностью, спасибо:)