2009-05-13 2 views
1

Я разрабатываю приложение для работы в фоновом режиме с помощью службы Windows. Я создал сервис благодаря учебнику MSDN, а затем я могу запустить или остановить его правильно.C# ExecuteCommand против остановленной службы Windows

Моей службе также необходимо выполнить пользовательские команды. Поэтому я применил метод «OnCustomCommand» в классе службы.

Я могу отправлять команды пользовательского исполнения с идентификаторами команд от 128 до 255, соответственно все, что я нашел в сети.

Моя проблема: Я не могу выполнить команду в службе, когда она остановлена. ExecuteCommand() бросает System.InvalidOperationException каждый раз, когда я его вызываю на serviceController.

Cannot control <myservice> service on computer '.' 

Это не происходит, когда служба работает.

MSDN говорит

При вызове ExecuteCommand, то статус сервиса не изменится. Если служба была запущена, статус остается включенным. Если услуга была остановлена, статус остается остановленным, и так далее.

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

Мой сервис устанавливается как служба LocalSystem, а serviceController запускается с правами администратора.

Кто-нибудь знает, как это решить?

ответ

3

Невозможно выполнить ExecuteCommand в отношении остановленного сервиса. Я считаю, что документация, которую вы читаете, говорит вам, что вызов ExecuteCommand не запускает службу, если она остановлена. Он не говорит, что вы все равно сможете вызвать метод; по существу, не существует объекта для выполнения метода on. Я думаю, что ваше лучшее решение - найти способ определить, остановлена ​​ли служба, если она есть, перезапустить ее, а затем вызвать ExecuteCommand. В противном случае вы можете использовать «грязный взлом» и попытаться выполнить вызов, если он не удается, поймать исключение и запустить службу и попробовать второй раз. Отнюдь не предпочтительнее, но возможно.

EDIT:

Предполагая, что вы с помощью ServiceController вы можете использовать Status свойство, чтобы определить, является ли услуга работает или нет.

+0

Возможно, вы правы. Было странно, что я не нашел решение, ища 2 дня. Документ MSDN неоднозначен по этому вопросу ... Я соответствующим образом реорганизую свое приложение. – Antwan

0

Невозможно выполнить команду с остановленным сервисом.

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

 Смежные вопросы

  • Нет связанных вопросов^_^