Как запустить программу GUI в службе Windows?

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

WTSGetActiveConsoleSessionId - >WTSQueryUserToken - >CreateProcessAsUser

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

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

4 ответов


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

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


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

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

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

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

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


вы можете работать в неправильном окне станции или рабочего стола. Смотрите это справочник Microsoft по оконным станциям и рабочим столам.


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

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