2012-06-12 8 views
5

Ich habe einen Dienst, der in einem System in mehreren Instanzen ausgeführt wird. Ich muss DISPLAY_NAME des Dienstes vom Service finden. Ich habe versucht, ServiceBase.ServiceName, aber es gibt (wahrscheinlich) den Namen des Dienstes aus dem Projekt-Installer, die zumindest in diesem Fall nutzlos ist.Wie findet man "Anzeigename" eines Dienstes in .net?

Der Dienst wird von installutil mit einem Parameter /name= installiert.

bearbeiten

Ich habe eine Abhilfe anhand von Imran Balouch Antwort. Ich las den Namen im Installer Me.Context.Parameters("name") und schreibe es in ImagePath Registrierungsunterschlüssel und las es mit Environment.GetCommandLineArgs in einem Dienst.

Antwort

4

Haben Sie ProjectInstaller in Ihrem Windows-Service-Projekt hinzugefügt? Wenn ja, dann fügen Sie in ProjectInstaller ServiceInstaller für Ihren Dienst hinzu, und in diesem ServiceInstaller können Sie den Anzeigenamen des Dienstes angeben. Wählen Sie diese Serviceinstaller und in Eigenschaften festgelegt seine Display Name oder in InitializeComponent von ProjectInstaller.Designer.cs oder ProjectInstaller.Designer.vb können Sie die Anzeigenamen festlegen, wie:

this.yourServiceInstaller.DisplayName = "Service Display Name"; 
+0

Der Dienst wird von installutil mit dem angegebenen Namen installiert. – IvanH

+0

Aber Sie hätten ein Projektinstaller in Ihrem Windows-Service-Projekt hinzugefügt, oder? –

+1

Ja, es gibt einen MultiProjectInstaller.vb. Also ist eine Lösung, den Namen zu lesen (wenn möglich und setzen Sie es). – IvanH

2

Sie können einen Dienst Anzeigenamen erhalten, seinen kurzen Servicenamen gegeben, durch die ServiceController-Klasse:

ServiceController sc = new ServiceController(this.ServiceName); 
var displayName = sc.DisplayName; 

Wie Sie gesagt hat, können Sie die ServiceName leicht zu bekommen, wie es ein Mitglied der eigenen Klasse ist, geerbt von ServiceBase. Dieser Servicename lautet unterschiedlich für verschiedene Instanzen der Dienste, die auf demselben Computer ausgeführt werden, da es ein eindeutiger Bezeichner ist.

+1

Es stoppt mit einem Fehler „Ungültiger Wert für Parameternamen ein.“ Und funktioniert, wenn ich den richtigen Namen angeben, aber es ist, was ich suche. – IvanH

Verwandte Themen