2009-05-13 1 views
0

Gibt es eine Möglichkeit, eine Abhängigkeit von einem "myWindowsService" zu einem anderen Dienst festzulegen, der auf demselben Computer wie "SqlService" ausgeführt wird?Windows-Dienstabhängigkeitsinjektion

Die prob ist, wenn Sie den Namen des „SQL-Dienst“ weiß nicht, wo „myWindowsService“ wird installiert, aber mein Service hängt davon ab, dass der SQL bereits ausgeführt wird ..

thanx

Antwort

0

bearbeiten : Die Frage wurde nicht richtig gelesen.

Eine Problemumgehung (nicht die eleganteste Lösung) besteht darin, alle Dienste gegen eine bekannte Whitelist mit bekannten Instanznamen aufzuzählen.


Mit Managementobject Sie Abhängigkeiten festlegen könnte (aber Sie haben den Namen des Dienstes kennen):

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

Wenn Sie

sc create <service> 

Syntax verwenden, können Sie andere liefern Dienste, die Ihren installierten Dienst davon abhängig machen, dass dieser Dienst gestartet wird.

sc create <service> depend= mssqlserver 

Dies kann auch automatisch erfolgen, wenn Sie die ServiceInstaller-Klassen verwenden. Es gibt einen Bereich in den Eigenschaften für diesen Controller, um Startabhängigkeiten zu definieren.

Ich weiß, Sie sagten, Sie könnten nicht den Namen der anderen Dienste kennen, aber die Abhängigkeiten ändern ist auch ziemlich einfach.