Запуск приложения из службы Windows

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

Короче говоря, я ищу способ запуска клиентского приложения из службы Windows через CreateProcess для предоставления информации пользователю. Однако оказывается, что служба не может даже увидеть файл / папку клиентского приложения, чтобы выполнить его. Я подозреваю, что это из-за учетных данных, под которыми работает служба, или, возможно, из-за ограничений уровня обслуживания, но хотел обратиться за некоторыми советами, прежде чем углубляться в это.

Итак, очевидный вопрос в первую очередь... я думаю об этом ясно? План архитектуры обоснован, или я должен взглянуть на другой метод? Я бы предпочел не повторять какую-либо работу, которую я уже выполнил, но, очевидно, хочу убедиться, что план и процесс надежны.

Вопрос № 2, с какими ограничениями я сталкиваюсь с этой моделью? Есть ли учетная запись службы, которая позволит этот уровень доступа?

Я, очевидно, борюсь с этим прямо сейчас, поэтому любые мысли или помощь будут с благодарностью!

Спасибо Крис

3 ответа

Решение

Как уже упоминали другие, вы не можете (легко) запустить приложение непосредственно из службы, поэтому я думаю, что самый простой способ обойти эту проблему - создать процесс, который запускается при входе в систему и выполняется с учетными данными вошедшего в систему пользователя, например, приложение, которое находится в системном трее, и открывает именованный канал или сетевой порт для службы. Если службе необходимо предупредить пользователя, она отправляет сообщение по этому каналу, а затем клиентский процесс может показать свой собственный пользовательский интерфейс или запустить приложение. Межпроцессное взаимодействие с использованием каналов или портов - самый простой способ справиться с ограничениями процессов сеанса 0.

Служба Windows не имеет доступа к пользовательскому сеансу в Vista и более поздних версиях, поэтому ей запрещено запускать исполняемый файл в этом сеансе. Вы можете скачать официальный документ от Microsoft, который детализируется: Влияние изоляции сеанса 0 на службы и драйверы в Windows.

Начиная с Vista, службы работают в сеансе 0, а рабочий стол пользователя всегда находится в другом сеансе. Таким образом, вам нужно много работать, чтобы запустить службу на рабочем столе пользователя.

Это можно сделать, но это довольно сложно. Подробности можно найти здесь: http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows-service-in-windows-vista-and-later.aspx?wa=wsignin1.0

Другие вопросы по тегам