2017-03-20 10 views
0

Ich versuche, mehrere Instanzen eines Dienstes auf demselben Server auszuführen, um mehrere Umgebungen zu unterstützen.Fehler beim Versuch, mehrere Instanzen eines Windows-Dienstes auszuführen

Ich habe versucht, ServiceInstaller.ServiceName wie empfohlen here und here zu ändern.

Jedoch MSDN says "Es ist wichtig, dass der ServiceName mit dem ServiceBase.ServiceName der Klasse [Service] identisch ist."

Ignorieren von MSDN, ich habe versucht, es trotzdem zu tun, nachdem ich die zwei Seiten sah, die ich oben verband. Wenn ich jedoch tue, erhalte ich eine Fehlermeldung, die besagt, dass Windows den Dienst "Anzeigename" auf dem lokalen Computer nicht starten konnte. Fehler 1083: Das ausführbare Programm, für das dieser Dienst konfiguriert ist, implementiert den Dienst nicht. "

This answer bestätigt, dass dies die Erklärung für diesen Fehler ist.

Antwort

0

Das hat mich schon lange geplagt. Dann, als ich zum 5. Mal this Q&A las, traf mich etwas.

Dieser Artikel verwendet keine dynamischen Namen, aber ich habe festgestellt, dass ServiceBase.ServiceName in der Hauptfunktion festgelegt wird. Es kam mir in den Sinn, dass ich vielleicht dasselbe dynamisch machen könnte, und es funktionierte.

Meine Hauptfunktion sieht nun wie folgt aus:

/// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    static void Main() 
    { 
     ServiceBase[] ServicesToRun; 
     ServicesToRun = new ServiceBase[] 
     { 
      new Service1(), 
      new Service2(), 
      new Service3() 
     }; 

     foreach (serviceBase Service in ServicesToRun) 
     { 
      service.ServiceName = FunctionToComputeDynamicName(service); 
     } 
     ServiceBase.Run(ServicesToRun); 
    } 

ich den Namen von Installer.Context bin immer Zeit, installieren und von App.config zur Laufzeit. Wenn Sie möchten, können Sie den Laufzeitnamen auch einfach mit der Version Args [] von Main abrufen.

Verwandte Themen