Как я могу обнаружить службу Windows при сборке проекта - PullRequest
0 голосов
/ 29 января 2009

Я работаю над решением, которое содержит службу Windows и клиент WinForms, который взаимодействует с этой службой.

В моих событиях до и после сборки у меня есть несколько команд net start и net stop для запуска и остановки службы, но бывают случаи, когда это вызывает проблему (файл не найден, служба уже остановлена). , так далее.).

Есть ли способ проверить, запущена или установлена ​​служба, до выдачи net start?

Я бы хотел поместить этот тест в файл .cmd и запустить его в событии перед сборкой для проекта.

Ответы [ 2 ]

1 голос
/ 29 января 2009

Вставьте это в файл сценария vb и добавьте к событиям до и после сборки.

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colRunningServices = objWMIService.ExecQuery _
             ("SELECT * FROM Win32_Service WHERE Name = 'someService'") 
Set objService = colRunningServices(0) 
If objService.State <> "Running" And objService.State <> "Starting" Then
  objService.StartService()
End If 
1 голос
/ 29 января 2009

На самом деле вам не нужно каждый раз устанавливать, запускать и останавливать сервис. Вместо этого рассмотрите возможность добавления ключа командной строки к исполняемому файлу службы, чтобы, когда он указан, выполнялся как служба (то есть выполняет обычные функции ServiceBase.Run ()), а когда этот ключ отсутствовал, он работал как обычная консоль. приложение. Вы получите дополнительное преимущество, заключающееся в возможности выгрузки выходных данных регистратора непосредственно на консоль, так что отладка будет намного проще.

if(args.GetLength(0) == 1 && args[0].ToUpper() == "/SERVICE")
{
    ServiceBase[] services = new ServiceBase[] { new MyService() };
    ServiceBase.Run(services);        
} // if
else
{
    InitAndStartWhateverIsNecessaryToRunServer();
    Console.ReadLine();    
} // else
...