Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Eigener Dienst neu starten
Pioneer17
myCSharp.de - Member



Dabei seit:
Beiträge: 154
Herkunft: Schweiz

Themenstarter:

Eigener Dienst neu starten

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
MartinH
myCSharp.de - Member

Avatar #avatar-1761.gif


Dabei seit:
Beiträge: 183
Herkunft: Asperg

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Pioneer17
myCSharp.de - Member



Dabei seit:
Beiträge: 154
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Lars Schmitt
myCSharp.de - Experte

Avatar #avatar-2240.jpg


Dabei seit:
Beiträge: 2335
Herkunft: Witten

beantworten | zitieren | melden

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
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Lars Schmitt am .
private Nachricht | Beiträge des Benutzers
Pioneer17
myCSharp.de - Member



Dabei seit:
Beiträge: 154
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Pioneer17 am .
private Nachricht | Beiträge des Benutzers
Lars Schmitt
myCSharp.de - Experte

Avatar #avatar-2240.jpg


Dabei seit:
Beiträge: 2335
Herkunft: Witten

beantworten | zitieren | melden

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 Beitrag wurde 1 mal editiert, zum letzten Mal von Lars Schmitt am .
private Nachricht | Beiträge des Benutzers
Pioneer17
myCSharp.de - Member



Dabei seit:
Beiträge: 154
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
m.knigge
myCSharp.de - Member

Avatar #avatar-3136.png


Dabei seit:
Beiträge: 178
Herkunft: Hannover

beantworten | zitieren | melden

Zitat von Pioneer17
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.
private Nachricht | Beiträge des Benutzers
Pioneer17
myCSharp.de - Member



Dabei seit:
Beiträge: 154
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

Ja ich sehe langsam, dass es auf das hinaus lauft, dass ich es mittels externem Programm mache...
private Nachricht | Beiträge des Benutzers