Starten Sie den Windows-Dienst programmgesteuert
Ich habe ein Problem mit einer Anwendung, die ich erschaffe. Ich versuche, einen windows-Dienst starten über mein C# - app. Wenn ich auf meine start-Taste, wie es aussieht, geht alles durch aber wenn ich am server anmelden, der service immer noch nicht angezeigt, dass es läuft. Allerdings, das zweite mal ich es laufen lasse, bekomme ich eine Ausnahme, sagt der Instanz des Dienstes wird bereits ausgeführt. Wenn ich wieder am server anmelden, der service scheint gestoppt zu sein. Hat schon mal jemand gesehen?
Hier ist mein code.
try
{
while (reader.Read())
{
int timeoutMilliseconds = 1000;
string serviceName = reader["ServiceName"].ToString();
string permission = reader["Permission"].ToString();
if (permission == "E")
{
lblServStartSuccess.Visible = true;
ServiceController service = new ServiceController(serviceName);
TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
else
{
lblServErrorStart.Visible = true;
}
}
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
EDIT: Hier ist die Ausnahme, die ich erhielt, auf einen service:
System.InvalidOperationException: Der Dienst Verwaltung Logischer Datenträger
Verwaltungs-Dienst wurde nicht auf computer '.'. --->
System.ComponentModel.Win32Exception: Der angegebene Dienst ist nicht
als installierter Dienst vorhanden --- Ende der inneren Ausnahme-stack-trace -
Ich weiß, der service vorhanden ist. Muss ich etwas hinzufügen, vor dem Dienst zu sagen, welche server zu betrachten?
- Sind Sie sicher, dass der Dienst nicht stecken in den ab-Zustand? Ich erinnere mich an die "Dienste" der Systemsteuerung war nicht Brillant, zu zeigen, dass (zumindest einige windows-version vor)
- was meinst du mit "wenn ich am server anmelden" - sind Sie versuchen, die SCM auf eine andere Maschine?
- Ja, ich bin mit den web-service von einem remote-server. Ich bin mit einem Konto mit admin-Zugang. Ich bin nicht sicher, ob es stecken geblieben ist. Könnte mein timeout zu kurz und es ist timing aus?
- Ach ja, und beide Systeme in Frage, die ausgeführt werden-Server 2003.
- 1 Sekunde ist ziemlich kurz für einen remote-Dienst zu starten. Ändern Sie es auf 60 Sekunden und sehen, ob das einen Unterschied macht.
- Ich entfernt die timeout-und das gleiche Problem. Alles scheint zu funktionieren. Der service funktioniert einfach nicht zeigen, wie Begonnen.
- Diese vielleicht banal, aber sind Sie sicher, dass die Dienstleistung, die Sie versuchen zu starten, installiert ist auf der Maschine, die Sie versuchen, starten Sie es auf?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn der code, den Sie gezeigt haben, ist die Ausführung auf einem anderen Computer als dem der Dienst laufen soll (ich bin mir nicht klar, aus Ihre Kommentare, wenn das der Fall ist oder nicht), würden Sie brauchen, um die Computer-Namen in die ServiceController-constructer.
Ist es möglich, Sie erfolgreich sind, starten Sie den Dienst, aber nicht auf der Maschine, die Sie denken? Passen die Symptome, die Sie beschreiben.
Siehe auch
ServiceController
constructor Dokumentation.Hier ist der code, den ich in einem Fenster Service verantwortlich für das stoppen, starten andere Dienste auf dem gleichen server ausgeführt.
Dies ist ein Alter thread, aber google hat mich hier. Meine Leistungen, auch nach dem erfolgreichen Start, würde die Abfrage wieder als beendet.
Wenn Sie hinzufügen
Wird die Abfrage der aktuellen status anstelle der gespeicherten Zustand aus einer vorherigen Abfrage. Ich weiß nicht, warum es so funktioniert, aber es funktioniert.
P. S.: ich habe eine minute lang Zeit und habe noch ein Dienst beendet wurde die Reaktion ohne den refresh.
Vergessen Sie nicht, fügen Sie ServiceProcess als Referenz
mit System.ServiceProcess;
Zunächst müssen Sie auf Verweis hinzufügen der DLL (ServiceProcess) in Ihrem Projekt Referenzen wie:
Dann fügen Sie ServiceProcess-DLL in Ihr Projekt:
Danach verwenden Sie diesen code:
Nur versuchen service.Start(); ohne timeout oder waitforstatus und Haken Ihre Veranstaltungen zu sehen, was passiert.