Создание Службы Windows для открытия программы-Delphi
Я создаю службу Windows с Delphi. Моя служба должна в основном открыть программу.
В моем коде я использую WinExec(aux,SW_SHOWNORMAL);
. Когда я запускаю и запускаю службу, ничего не делается, но когда я смотрю в TaskManager, программа, которую должен открыть мой сервис, находится в списке, а в столбце Username появляется SYSTEM.
таким образом, программа открывается, но она не отображается на экране.
Я сделал исследование в Google и нашел некоторые функции, такие как CreateProcess
но я не знаю как использовать его.
Что я делаю не так?
извините за мой плохой английский.
1 ответов
службы всегда работают в сеансе 0. Процесс, запущенный службой, запускается в сеансе службы по умолчанию, если служба не использует CreateProcessAsUser()
для запуска процесса в другом сеансе.
в XP и более ранних версиях первый пользователь для входа также запускается в сеансе 0 (последующие пользователи для входа в систему запускаются в сеансах 1+). Таким образом, если служба помечена как интерактивная при установке и запускает процесс с пользовательским интерфейсом, пользователь, работающий в сеансе 0, может видеть пользовательский интерфейс.
In Vista и позже, это больше не возможно. Пользователи больше не запускаются в сеансе 0, и службы больше не могут быть помечены как интерактивные. Это известно как"изоляция сеанса 0". Сервис должен использовать CreateProcessAsUser()
теперь для запуска процесса пользовательского интерфейса в интерактивном сеансе, чтобы пользователь мог его видеть.
см. MSDN для получения более подробной информации:
влияние сеанса 0 изоляции на службы и драйверы в Окна
вызов CreateProcessAsUser () из службы
запуск интерактивного процесса из службы Windows в Windows Vista и более поздних версиях