Laden...

Eigener Dienst neu starten

Erstellt von Pioneer17 vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.730 Views
P
Pioneer17 Themenstarter:in
148 Beiträge seit 2007
vor 13 Jahren
Eigener Dienst neu starten

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

185 Beiträge seit 2005
vor 13 Jahren

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.

P
Pioneer17 Themenstarter:in
148 Beiträge seit 2007
vor 13 Jahren

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.

2.223 Beiträge seit 2005
vor 13 Jahren

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

P
Pioneer17 Themenstarter:in
148 Beiträge seit 2007
vor 13 Jahren

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.

2.223 Beiträge seit 2005
vor 13 Jahren

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

P
Pioneer17 Themenstarter:in
148 Beiträge seit 2007
vor 13 Jahren

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.

175 Beiträge seit 2010
vor 13 Jahren

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.

P
Pioneer17 Themenstarter:in
148 Beiträge seit 2007
vor 13 Jahren

Ja ich sehe langsam, dass es auf das hinaus lauft, dass ich es mittels externem Programm mache...