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

StackOverflow https://stackoverflow.com/questions/948417

  •  09-09-2019
  •  | 
  •  

Вопрос

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

WTSGetActiveConsoleSessionId->WTSQueryUserToken->CreateProcessAsUser

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

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

Это было полезно?

Решение

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

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

Другие советы

Я полагаю, что все это связано с разрешениями.

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top