Ich verwende Befehlszeilenargumente, um eine Konfiguration an den Windows-Dienst zu übergeben (es werden nur wenige Instanzen mit verschiedenen Befehlszeilen sein).
Mein Code sieht so aus:
%Vor%Wenn ich den Dienst installiere, verwende ich:
%Vor% Leider sind sqlserver
Befehlszeilenoptionen nur in der Installationsphase verfügbar und gehen nicht zu den Parametern des Dienstes. Wenn ich den Dienst ausführe, bekomme ich keinen Parameterwert, den ich brauche.
Gibt es eine Möglichkeit, die Befehlszeile des von TopShelf gestarteten Dienstes zu ändern?
Ich habe eine ähnliche Anforderung und leider war das Speichern der Befehlszeilenparameter in einer Datei keine Option.
Haftungsausschluss: Dieser Ansatz gilt nur für Windows
Zuerst habe ich eine Nach der Installation
hinzugefügt %Vor% In AddCommanLineParameterToStartupOptions
Ich aktualisiere den ImagePath Windows-Registrierungseintrag, damit der Dienst die Befehlszeilenparameter aufnehmen kann.
TopShelf fügt nach diesem Schritt seine Parameter hinzu, um Duplikate von servicename
und instance
zu vermeiden. Vielleicht möchten Sie mehr als nur diese herausfiltern, aber in meinem Fall war das genug.
Sie können die an den Service übergebene Befehlszeile nicht ändern. Ich umgehe das, indem ich diese Parameter in der Konfiguration neben der exe speichere. So kann ein Benutzer dies tun:
%Vor%und die App speichert die Verbindungszeichenfolge in einer Datei (entweder mit System.IO.File oder mit ConfigurationManager)
Dann, wenn der Benutzer dies tut:
%Vor%Oder wenn der Dienst als Windows-Dienst ausgeführt wird, wird die Anwendung nur von config geladen.