#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()
создать процесс с графическим интерфейсом в отдельном интерактивном пользовательском сеансе, независимо от того, какую учетную запись пользователя вы назначаете процессу.