Процесс появления из службы C # Windows - PullRequest
2 голосов
/ 18 ноября 2011

Ну, я пытаюсь создать процесс из потока, порожденного службой Windows. Цель состоит в том, чтобы прочитать вывод и распечатать окно в фокусе - там, где находится курсор. Вероятно, плохая идея, я не знаю, я не программист C #

Любой, кто порождает процесс, работает, когда я вызываю саму функцию, но не когда она вызывается внутри работающей службы. Возможно ли запуск процесса внутри службы?

Process proc = new Process();
                proc.StartInfo.FileName = @"C:\file.bat";
                proc.StartInfo.RedirectStandardError = true;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.UseShellExecute = false;

                proc.Start();

                String outputMessage = proc.StandardOutput.ReadToEnd();
                proc.WaitForExit();

Ответы [ 2 ]

6 голосов
/ 18 ноября 2011

Запуск процесса из службы, безусловно, возможен. Однако службы работают в сеансе 0 и не имеют рабочего стола. Интерактивные пользователи запускают свои рабочие столы в другом сеансе. Следовательно, при запуске из службы очень сложно запустить и запустить процесс в интерактивном сеансе.

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

Самый простой подход - разделить ваш сервис на две отдельные части. Одна часть работает как служба, а другая часть - как процесс без окон в интерактивном сеансе. Эти два процесса могут взаимодействовать любым механизмом IPC, который вы предпочитаете. Когда служба хочет запустить процесс, она просто отправляет сообщение своей второй половине в интерактивном сеансе, чтобы запросить запуск нового процесса.

0 голосов
/ 18 ноября 2011

Если вам нужно взаимодействовать между вашим GUI и показывать какую-то обратную связь пользователю, почему бы вам не реализовать интерфейс WCF через именованный канал. Разместите его в своем сервисе и предоставьте API статуса или даже функции, если это необходимо. Таким образом, вы можете предоставить графический интерфейс любому пользователю в системе, и сервис останется чистым.

Но, как отметил @David Heffernan, на самом деле не рекомендуется создавать графические интерфейсы из служб Windows, а начиная с Vista они создают в контексте сеанса 0.

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