Как я могу удаленно запустить / остановить службу, используя MSBuild? - PullRequest
4 голосов
/ 13 февраля 2011

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

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="C:\Program Files (x86)\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
  <Target Name="MyTarget">
    <ServiceController MachineName="Box2" ServiceName="MyService" Action="Stop" />
  </Target>
</Project>

Когда я запускаю его на машине, которая может видеть Box2, я получаю следующее:

Project "C: \ Scripts \Test.xml "на узле 1 (цели по умолчанию).

C: \ Scripts \ Test.xml (4,5): ошибка: Не удалось найти службу MyService на Box2Готово Создание проекта

"C: \ Scripts \ Test.xml" (цели по умолчанию) - СБОЙ.

Я знаю, что у меня правильное имя службы (яскопировал и вставил его из фактического списка услуг), и я вполне уверен, что он может видеть Box2, потому что, если я изменю его на имя машины, которая не существует (например, Box2asdf), потребуется около 10 секунд, чтобы вернуться (с той же ошибкой, заметьте), в отличие от почти немедленного ответа, который я получаю, когда предоставляю правильное имя компьютера.

Как я могу отладить эту проблему?

Ответы [ 3 ]

2 голосов
/ 13 февраля 2011

Вы можете попробовать это вместо ...

Вы можете использовать программу sc командной строки и выполнить это ...

т.е.

SC \ ServerName stop ServiceName

http://support.microsoft.com/kb/166819

Для получения дополнительной информации о том, как выполнить команду из msbuild, проверьте это .. выполнить команду с параметрами, используя msbuild

0 голосов
/ 14 февраля 2011

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

И ответ @ jsobo может быть очень полезен для диагностики фактической причины, поскольку он может отображать собственноеошибки без оболочек исключений .Net вокруг них:

sc.exe \ Box2 stop MyService

0 голосов
/ 14 февраля 2011

Задачи сообщества должны работать.Просто используйте Sc query, чтобы проверить, что сервис работает.как для использования msbuild его все еще используя msbuild, если вы оберните sc в exec?По крайней мере, вы не зависите от сторонней библиотеки dll в процессе сборки.

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