Запуск внешнего процесса из службы Windows - PullRequest
2 голосов
/ 01 июля 2011

У меня есть служба Windows, которая использует стороннее приложение.Это приложение создается из единого окна для входа в систему, после входа в систему процесс работает в фоновом режиме и никого не беспокоит.

У меня есть код, который открывает это приложение (с использованием класса Process), заполняет все необходимые поляи нажмите кнопку подключения.Этот код прекрасно работает, когда я использую его из командной строки или формы win, однако выполнение этого кода из службы Windows ничего не делает - не ошибок и не запускается exe! ​​

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

Я пытался проверить «разрешить службе взаимодействовать с рабочим столом» на вкладке входа в свойствах службы, но это ничего не дало.

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

Спасибо.

Ответы [ 3 ]

1 голос
/ 01 июля 2011

Вам нужно перекалибровать ваши ожидания. Запустите свой сервис автоматически при запуске системы. Запустите приложение, когда пользователь войдет в систему (например, HKLM\Software\Windows\CurrentVersion\Run). Убедитесь, что служба устойчива к запуску до приложения. Также убедитесь, что служба может пережить остановку приложения (например, сбой) и перезапуск.

Почему я все это говорю? Ну, службы предназначены для работы в любое время, даже если нет подключенных интерактивных пользователей. Если это так, то вы просто не можете ожидать, что ваше интерактивное приложение будет запущено до запуска службы.

1 голос
/ 01 июля 2011

Может быть, это сможет вам помочь?http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows-service-in-windows-vista-and-later.aspx

Обратите внимание, что это для Windows SDK, и вам нужно будет использовать PInvoke для выполнения там методов.

Также смотрите этот связанный вопрос: Как начатьпроцесс из службы Windows в текущий сеанс пользователя

0 голосов
/ 01 июля 2011

У меня раньше были подобные проблемы с сервисом windows, который должен был показывать форму при определенных условиях, но большую часть времени просто бездействовал в фоновом режиме.

Не уверен, каковы ваши требования, но в итоге я написал его как приложение для форм без основной формы.

Соедините это с запуском программы при запуске, и она работает довольно хорошо.

В основном

[STAThread]
    static void Main(string[] args)
    {
        // Launch your stuff in a separate thread like you would in the Service Start method.      

        Application.Run();       
    }

и все. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...