Wieder eine Frage
ich habe einen Windows Service erstellt. Diesen möchte ich jetzt mit einem internen Aufruf neu starten.
Bsp.:
...
bool restart = false;
if(restart)
{
//dieser Service neu starten
}
...
Mittels ServiceController geht nicht, da es dort nicht eine Restart-Funktion gibt. Wenn ich sozusagen mich selber beende, kann ich nicht mehr starten weil ich ja beendet bin.
Erneut besten Dank für die Hinweise / Möglichkeiten
Warum stellst du in den Diensten nicht ein, das dein Dienst automatisch wieder gestartet wird? Dann beendest du den Dienst, und Windows startet den Dienst wieder.
Ich möchte lediglich meinen eigenen Dienst neu starten nicht das Ganze Windows.
Oder verstehe ich dich falsch?
Wo kann ich in meinem Dienst angeben dass er automatisch wieder starten soll wenn er beendet wird?
Spontan kommt mir nur der Windows Scheduler in den Sinn, den betrachte ich jedoch nicht gerade als die beste Variante.
Hallo Pioneer17,
nein das ist nicht gemeint, du kannst im Fenster Service.msc bei deinem Dienst einstellen das er wieder neugestartet wird.
da würden mir so einige Wege einfallen
http://www.csharp-examples.net/restart-windows-service/
oder
eine Batch Datei die gestartet wird mit z.B.
net stop service
net start service
oder
Powershell
Restart-Service service
Viele Grüße
Lars
Hi Lars Schmitt
ok, wenn dem so ist, wo in den Diensten kann das eingestellt werden? Hab die verschiedenen Reiter bereits durch geklickt jedoch nicht gerade was passendes gerunden...
Das mit der Batch wäre eben meine "Notlösung".
Den von dir erwähnte Link habe ich auch bereits gesehen, jedoch nützt der mir auch nichts, weil diese Methode auch lediglich den Dienst stoppt und wieder neu startet. Wenn ich jedoch aus meinem Dienst mich selber beende, kann ich ja den start Befehl nicht mehr geben.
bei meinem win 7 gibt es ein Punkt 'Wiederherstellung'
das aus dem Link sehr wohl klappen, der eigentliche wird ja nicht sofort gestartet
Windows Startet die Main Methode und diese Startet den Service
wenn du also in der Klasse Program nun diesen Restart code reinpackst kann das sehr wohl funktionieren
Viele Grüße
Lars
Dieser Punkt unter Wiederherstellung lässt den Dienst aber nur neu starten wenn er mittels Fehler beendet wurde. Ist aber auch nicht die sauberste Art einen Dienst so neu zu starten in dem man ihn absichtlich "abschiesst".
Auch das zweite kann ich nicht nach voll ziehen.
zuerst wird
...
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
...
aufgerufen, sobald das abgelaufen ist, ist mein Dienst beendet. Somit ist es aus meiner Sicht nicht mehr Möglich
int millisec2 = Environment.TickCount;
timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2-millisec1));
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
aufzurufen.
ich habe einen Windows Service erstellt. Diesen möchte ich jetzt mit einem internen Aufruf neu starten.
Starte doch ein externes Programm (eines, das Du halt mitlieferst), das eben Deinen Dienst stoppt und dann neu startet....
Evtl. benötigst Du "sogar" keine separate .EXE dafür. Wenn ich mich richtig entsinne, dann ist doch der Eintrittspunkt bei einem Dienst die Funktion "ServiceMain" und bei einer "normalen" EXE die main(). Implementiere doch einfach beide - und in der main() führst Du halt den Restart durch....
Keine Ahnung ob das bei .NET auch so ist - bisher habe ich Dienste immer in "nacktem" C implementiert... Ich hab' auch gerade keinen Code zur Hand...
Bye,
Michael
Debuggers don't remove Bugs, they only show them in Slow-Motion.
Ja ich sehe langsam, dass es auf das hinaus lauft, dass ich es mittels externem Programm mache...