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