Создание Службы 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 Изоляция

влияние сеанса 0 изоляции на службы и драйверы в Окна

вызов CreateProcessAsUser () из службы

запуск интерактивного процесса из службы Windows в Windows Vista и более поздних версиях

функция CreateProcessAsUser