Не удается выполнить процесс графического интерфейса Windows из службы, запущенной под неинтерактивной учетной записью

#windows #windows-services #win32gui #win32-process

Вопрос:

Я вошел в систему как пользователь. Существует служба, запущенная под учетной записью UserB. Когда служба выполняет новый процесс с графическим интерфейсом, новый процесс запускается без графического интерфейса. Я ожидаю, что он будет вести себя так, как если бы я «запускался от имени» с другим пользователем.

Со службы я попробовал system и CreateProcess . Тот же результат.

Комментарии:

1. Начиная с Windows Vista, службы запускаются исключительно в неинтерактивном сеансе. Если они запустят приложение с графическим интерфейсом, вы не сможете его увидеть. Поэтому вместо этого вам нужно запустить приложение с графическим интерфейсом в пользовательском сеансе, например, CreateProcessAsUser() используя токен пользователя из сеанса пользователя.

2. У меня должно быть приложение с графическим интерфейсом, работающее под учетной записью пользователя

3. Просто потому, что служба работает от имени пользователя, не означает, что она работает в сеансе пользователя. Учетные записи пользователей и сеансы пользователей-это две разные вещи. Если вы пытаетесь заставить службу запускать графический интерфейс в сеансе пользователя с учетной записью пользователя, то вам предстоит проделать определенную работу. Попросите службу получить токен пользователя UserB, продублировать его, присвоить ему идентификатор сеанса пользователя, а затем передать его CreateProcessAsUser()

4. Когда я просматриваю службу в taskviewer, я вижу имя пользователя, поэтому я делаю это для выполняемого процесса. Единственная проблема-отсутствие графического интерфейса.

5. Опять же, служба всегда запускается в сеансе 0, независимо от пользователя, от имени которого она запускается. И начиная с Windows Vista, СЕАНС 0 НЕ МОЖЕТ ОТОБРАЖАТЬ ГРАФИЧЕСКИЕ ИНТЕРФЕЙСЫ! Поэтому вы ДОЛЖНЫ дать указание CreateProcessAsUser() создать процесс с графическим интерфейсом в отдельном интерактивном пользовательском сеансе, независимо от того, какую учетную запись пользователя вы назначаете процессу.