2009-07-09 15 views
5

Ich arbeite an einer Anwendung, die als Dienst gestartet wird, aber nur, wenn ein Befehlszeilenschalter dies angibt (andernfalls wird ein Standardformular geöffnet). Wenn der Dienst beim Starten von Windows gestartet wird, muss er diese Befehlszeilenoption bestehen oder der Dienst kann nicht gestartet werden.Befehlszeilenargumente zu Service-Installer hinzufügen C#

Ich möchte, dass das Installationsprogramm (ServiceProcessInstaller) eine Befehlszeilenoption hinzufügt, damit beim Start des Dienstes die Befehlszeilenoption zum Befehl hinzugefügt wird.

Beispiel: MyService.exe -commandlineoption

Ich dachte, das war es, was die ServiceProcessorInstaller.Context Eigenschaft war, aber das ist für die Argumente, die auf InstallUtil ausgeführt wurden.

Irgendwelche Vorschläge?

+0

Es ist nicht klar aus Ihrer Frage: Ist Ihre Anwendung die Installation des Dienstes, starten Sie es oder beides? – adrianbanks

+0

Ich denke zuerst. –

+0

Sorry für die Mehrdeutigkeit. Die Anwendung ist normalerweise eine Standardanwendung für Windows Forms. In der Main() -Methode wird jedoch nach Befehlszeilenargumenten gesucht. Wenn eine Befehlszeilenoption -service vorhanden ist, wird der Dienst gestartet. Ich habe auch eine Installer-Klasse hinzugefügt, nach der InstallUtil sucht, um den Dienst bei Windows zu registrieren. Wenn der Dienst beim Booten von Windows gestartet wird, sollte der Dienst mit der Befehlszeilenoption aufgerufen werden. – Tim

Antwort

1

Wenn ich habe zu Dienstleistungen Befehlszeilenoptionen hinzugefügt, ich habe immer zu laufen als Dienst vorbelegt . Ich weiß jedoch, dass das Gegenteil möglich ist, weil SvcHost so funktioniert: Es ist eine EXE, die immer konfiguriert ist, DLLs als Dienste zu laden.

+0

Und hier ist, wie mit freundlicher Genehmigung von Jorg: http://stackoverflow.com/questions/652654/set-start-parameters-on-service-installation-with-net-serviceinstaller –

+0

Die Frage, die Sie verknüpft scheint zu sein was ich brauche. Ich glaube, ich habe nicht nach den richtigen Worten gesucht. Sie konnten es nicht leicht machen, oder ?! Danke Steven! – Tim

+0

Jorg bekommt den Kredit, aber ich bin froh, Ihre Aufmerksamkeit auf seine gute Arbeit gerichtet zu haben. –

0

Ein Service wird nur einmal pro Release installiert. Es hört sich so an, als würden Sie ein Kommandozeilenargument an den Dienst übergeben, wenn es gestartet wird.

Sie können Befehlszeilenargumente an den Dienst übergeben, wenn Sie beginnen, es die Verwendung von ServiceController.Start method:

using (var controller = new ServiceController("servicename")) { 
    controller.Start(arg0, arg1); 
} 
+0

Wenn das der Fall ist, siehe z.B. mein Q unter http://stackoverflow.com/questions/652654/set-start-parameters-on-service-installation-with-net-serviceinstaller –

+0

Gibt es einen Widerspruch? –

+0

John, die Frage, die er verknüpfte, erläutert, wie der Dienst konfiguriert wird, um Parameter anzuhängen, die übergeben werden, wenn der Dienst von jedem gestartet wird. Ich denke, es enthält die Antwort auf Tims Frage. –