Невозможно выполнить программу из службы
У меня есть служба Windows, которую я хочу периодически выполнять внешнюю программу. В настоящее время я делаю это обычным способом
Process program = Process.Start(@"C:\mpewatch\db_parameters\DBParameters.exe");
Это не похоже на работу. Я выполняю это из отдельного потока, который запускается в моей службе OnStart
обработчик. Есть ли какая-то концептуальная проблема с этим? Разве невозможно выполнить внешние программы из такой службы?
3 ответа
Ваш вопрос не указывает на операционную систему.
В Windows XP вы можете настроить службу Windows для взаимодействия с рабочим столом, открыв панель управления службой, дважды щелкнув службу, выбрав вкладку "Вход в систему", настроив службу для запуска в качестве локальной системы, и установив флажок. Это довольно просто. Вы можете попробовать протестировать что-то вроде Notepad.exe, чтобы посмотреть, сможете ли вы заставить его работать.
Однако в Vista (и, вероятно, в Windows 7) вам может не повезти. Я читал, что возможность взаимодействия служб Windows с рабочим столом в Vista была удалена. Я забыл, что такое терминология, но в основном сервисы будут работать в "оболочке 0", тогда как пользователи будут занимать "оболочку 1". Пользовательские приложения смогут взаимодействовать со службами и наоборот, используя такие технологии, как WCF, но службы не смогут напрямую связываться с рабочим столом. Например, любые всплывающие окна с ошибками должны быть обработаны путем замены на "оболочку 0". Опять же, это основано на том, что я прочитал несколько месяцев назад, и я больше не смотрю на это. Для меня я структурировал свой сервис Windows так, чтобы он настраивался с помощью WCF через внешнее приложение.
Извините, у меня нет ссылки для вас, но если вашему сервису в конечном итоге придется перейти на более новую ОС (или вы уже там), это стоит проверить.
Вы можете выполнять внешние программы из службы, но есть проблемы с безопасностью. Например, ваша служба может работать под учетной записью, у которой нет доступа на чтение к папке, в которой находится внешняя программа, даже если ваша интерактивная учетная запись имеет такой доступ.
В целях тестирования попытайтесь настроить службу для работы под вашей интерактивной учетной записью. Если программа вызывается должным образом, проблема с исходной учетной записью заключается в том, что у нее недостаточно прав для запуска программы.
Еще одно критическое соображение о службах Windows - отсутствие графического интерфейса. Технически, есть возможность разрешить службе взаимодействовать с локальным графическим интерфейсом, но вы ее не увидите. Это связано с тем, что службы работают как пользователь локальной системы.
Внутри сервиса любое модальное диалоговое окно (ОК, Отмена и т. Д.) Считается ошибкой.