Как запустить программу с графическим интерфейсом в службе Windows?
-
09-09-2019 - |
Вопрос
Когда я запускаю службу от имени учетной записи LocalSystem, я могу использовать следующие коды для запуска программы с графическим интерфейсом под текущей учетной записью входа:
WTSGetActiveConsoleSessionId->WTSQueryUserToken->CreateProcessAsUser
Однако, когда я запускаю службу от имени своей личной учетной записи, программа с графическим интерфейсом НЕ отображается.Хотя я вижу это в диспетчере задач.
Что я должен сделать, чтобы запустить программу с графическим интерфейсом, когда сервис запущен под моей личной учетной записью?
Решение
Джон и jdigital оба правы - насколько я понимаю, службы обычно могут иметь либо доступ к рабочему столу (вы должны использовать localsystem), либо доступ к сети (вам нужно указать учетную запись для запуска под ней).
Вам нужно будет разделить ваше приложение на две части - одну для взаимодействия с рабочим столом, а другую для обмена данными по сети.Затем две части могут взаимодействовать друг с другом, чтобы передавать информацию конечному пользователю.
Другие советы
Я полагаю, что все это связано с разрешениями.
LocalSystem обладает достаточными привилегиями, чтобы выдавать себя за текущего пользователя, в отличие от вашей учетной записи.
Вам нужно было бы найти способ расширить разрешения для вашей службы, либо запросив учетные данные, либо подключившись к вспомогательной службе, которая работает как LocalSystem.
(Почему вы хотите работать со своей учетной записью, а не с LocalSystem?)
Я уверен, что есть гораздо более подробные ответы, которые касаются того, как это сделать, но на высоком уровне я думаю, что это проблема.
Возможно, вы работаете не на той оконной станции или рабочем столе.Видишь это Справочник Microsoft по оконным станциям и рабочим столам.
Я полагаю, что то, что вы пытаетесь сделать, можно считать уязвимостью в системе безопасности.Это также вряд ли сработает и в некоторых случаях.Я думаю, что jdigital прав в том, что это связано с window station и попыткой получить доступ к текущей пользовательской window station и ее рабочему столу.Это сильно сбивает с толку, когда вы находитесь под сервером служб терминалов, где есть несколько текущих оконных станций.Microsoft действительно не хочет, чтобы вы делали то, что вы хотите, и они усложняют это с каждым выпуском Windows.
Я думаю, вам лучше всего решить проблему под другим углом и просто создать приложение с графическим интерфейсом, которое пользователь запускает (вручную или автоматически при входе в систему) и которое взаимодействует с вашим сервисом.