2009-05-13 4 views
0

Есть ли способ установить зависимость одного «myWindowsService» к другой службе, запущенной на том же компьютере, что и «SqlService»?Включение зависимостей служб Windows

к веро, если вы не знаете название «службы SQL», где «myWindowsService» будет установлена, но моя служба зависит от того, что SQL уже работает ..

Thanx

ответ

0

Редактировать : Не прочитал вопрос правильно.

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


Использование ManagementObject можно установить зависимостей (но вы должны знать имя службы):

bool SetServiceDependencies(string serviceName, string[] dependencies) 
    { 
     try 
     { 
      string objPath = string.Format("Win32_Service.Name='{0}'", serviceName); 
      //Uses lazy initialization 
      ManagementObject mmo = new ManagementObject(new ManagementPath(objPath)); 
      //Get properties to check if object is valid, if not then it throws a ManagementException 
      PropertyDataCollection pc = mmo.Properties; 
     } 
     catch (ManagementException me) 
     { //Handle errors 
      if (me.ErrorCode == ManagementStatus.NotFound) { 
       //Service not found 
      } 
      return false; 
     } 
     try 
     { 
      object[] wmiParams = new object[11]; //parameters for Win32_Service mmo object Change-parameters 
      wmiParams[10] = dependencies; 

      //Should we remove dependencies, use array containging 1 empty string 
      if (dependencies == null || dependencies.Length == 0) 
      { 
       wmiParams[10] = new string[] { "" }; 
      } 

      //Change dependencies 
      string returnStatus = mWmiService.InvokeMethod("Change", wmiParams).ToString(); 
     } 
     catch (Exception) 
     { 
      return false; 
     } 
     return true; 
    } 
0

Если вы используете

sc create <service> 

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

sc create <service> depend= mssqlserver 

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

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

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