#windows-services
Вопрос:
Я создал службу Windows на C# и Windows Server 2003. Я хотел бы, чтобы моя служба могла запускать exe-файл, который является приложением Windows forms. Когда я запускаю службу — она запускает другое приложение, но я его не вижу. Когда я открываю диспетчер задач — я вижу, что приложение запущено, но я просто не могу его видеть. Я проверил «Разрешить службе взаимодействовать с рабочим столом», но ничего не происходит. Пожалуйста, помогите. Можно ли запустить и выполнить exe-файл из службы Windows и увидеть исполняемый файл, запущенный в widnows server 2003?
Ответ №1:
Отображение пользовательского интерфейса из службы Windows очень проблематично, поскольку служба может работать на другом рабочем столе пользователя (а в Vista/Server 2008 фактически всегда будет работать на другом рабочем столе).
Самое простое решение-запустить пользовательский интерфейс не непосредственно из службы, а из приложения, запущенного на рабочем столе пользователя (возможно, настроенного на запуск при входе в систему), которое каким-то образом взаимодействует со службой.
Просто помни:
- Возможно, не было зарегистрированного пользователя
- Может быть несколько пользователей, вошедших в систему с помощью быстрого переключения пользователей или удаленного рабочего стола
- Приложение на рабочем столе пользователя выполняется в контексте безопасности пользователя, а не службы
Комментарии:
1. Хороший Ответ. Возможно, добавьте рекомендацию о том, как взаимодействовать между службой и настольным приложением.
2. @Ken: Именованные каналы, DCOM, RPC, даже TCP/IP — выбирайте сами 🙂