Как запустить программу с графическим интерфейсом в службе Windows? - PullRequest
8 голосов
/ 04 июня 2009

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

WTSGetActiveConsoleSessionId-> WTSQueryUserToken-> CreateProcessAsUser

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

Что я должен сделать, чтобы запустить программу с графическим интерфейсом, когда служба работает под моей личной учетной записью?

Ответы [ 4 ]

2 голосов
/ 04 июня 2009

Джон и jdigital оба правы - насколько я понимаю, сервисы, как правило, могут иметь либо доступ к рабочему столу (вы должны использовать локальную систему), либо доступ к сети (вам нужно указать учетную запись для запуска).

Вам понадобится два приложения, разделенных на два: одно для взаимодействия с рабочим столом, а другое для общения по сети. Затем эти две части могут общаться друг с другом для передачи информации конечному пользователю.

0 голосов
/ 04 июня 2009

Возможно, вы работаете не в той оконной станции или на рабочем столе. См. Этот справочник Microsoft по оконным станциям и рабочим столам .

0 голосов
/ 04 июня 2009

Я считаю, что то, что вы пытаетесь сделать, может считаться уязвимостью безопасности. Это также вряд ли сработает в некоторых случаях. Я думаю, что jdigital прав в том, что он связан с оконными станциями и пытается получить доступ к текущей оконной станции пользователя и ее рабочему столу. Это сильно сбивает с толку, когда вы находитесь под сервером служб терминалов, где есть несколько текущих оконных станций. Microsoft действительно не хочет, чтобы вы получали то, что хотите, и с каждым выпуском Windows они усложняются.

Я думаю, что вам лучше всего решить проблему под другим углом и просто создать приложение с графическим интерфейсом, которое пользователь запускает (вручную или автоматически при входе в систему) и обращается к вашему сервису.

0 голосов
/ 04 июня 2009

Все это связано с разрешениями, которые я считаю.

LocalSystem имеет достаточные привилегии для олицетворения текущего пользователя, но ваша учетная запись этого не делает.

Вы должны найти способ расширить разрешения для вашей службы, либо запросив учетные данные, либо подключившись к вспомогательной службе, которая работает как LocalSystem.

(Почему вы хотите использовать свою учетную запись вместо LocalSystem?)

Я уверен, что есть гораздо более подробные ответы, которые касаются входов и выходов из этого, но на высоком уровне я думаю, что это проблема.

...