2009-08-18 4 views
0

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

Process program = Process.Start(@"C:\mpewatch\db_parameters\DBParameters.exe"); 

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

ответ

1

В вашем вопросе не указана операционная система.

В Windows XP вы можете настроить службу Windows для взаимодействия с рабочим столом, открыв панель управления службами, дважды щелкнув вашу службу, выбрав вкладку «Вход в систему», настроив службу для запуска в качестве локальной системы и проверив флажок. Это довольно просто. Вы можете попробовать протестировать что-то вроде Notepad.exe, чтобы убедиться, что вы можете заставить его работать.

В Vista (и предположительно Windows 7), однако, вам может быть не повезло. Я прочитал, что возможность работы служб Windows с рабочим столом была удалена в Vista. Я забываю, что такое терминология, но в основном службы будут работать в «shell 0», тогда как пользователи будут занимать «оболочку 1». Пользовательские приложения смогут общаться с сервисами и наоборот использовать технологии, такие как WCF, но службы не смогут напрямую общаться с рабочим столом. Например, любые всплывающие окна ошибок должны быть обработаны путем замены на «shell 0.» Опять же, это основано на том, что я прочитал несколько месяцев назад, и я больше не смотрел на него. Для меня я сконфигурировал мою службу Windows для настройки с помощью WCF через внешнее приложение.

Прошу прощения, у меня нет ссылки для вас, но если ваша служба, в конечном счете, должна будет перейти на более новую ОС (или вы уже там), это то, что нужно проверить.

+0

Этот флажок работал отлично, и предложение по тестированию с помощью Notepad также было очень полезно. Огромное спасибо. –

4

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

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

1

Еще одно важное соображение в службах Windows заключается в отсутствии графического интерфейса пользователя. Технически существует возможность разрешить службе взаимодействовать с локальным графическим интерфейсом, но вы ее не увидите. Это происходит из-за служб, выполняемых как пользователь локальной системы.

В рамках службы любое модальное диалоговое окно (ОК, Отмена и т. Д.) Считается ошибкой.

+1

Но предположительно не в отдельной программе, порожденной службой. –