Laden...

Windows-Dienst starten und stoppen

Erstellt von Thorsten1983 vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.166 Views
T
Thorsten1983 Themenstarter:in
147 Beiträge seit 2005
vor 18 Jahren
Windows-Dienst starten und stoppen

Hallo an Alle,

da ich neu hier bin moechte ich zuerst ma allen Usern "Hallo" sagen .. 🙂

so das waere geschafft aber nun hier meine Frage:

Ich habe eine .Net Anwendung geschrieben (Windows Dienst)

ueber eine zweite Anwendung (Form Anwendung) soll der Dienst gesteuert werden, jetzt kann der Anwender bestimmte Parameter die im Dienst benoetigt werden im GUI Programm aendern und muss dann mittels eines ClickEvents auf einem Button den Dienst neu starten. Bis jetzt habe ich diesses Problem ueber net stop und net start geloest, allerding sieht diese Loesung im Endprodukt sehr stuemperhaft und billig aus, hat jemand eine Idee oder einen Vorschlag wie ich den Start und Stop einen Dienstes attraktiver gestallten koennte?

THX schon mal

Greetz Thorsten Hans

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Thorsten1983,

wozu musst du den Dienst denn überhaupt stoppen und starten? Das GUI kann ihm doch die geänderten Werte schicken (Stichwort: Remoting) und der laufende Dienst kann darauf reagieren.

herbivore

T
Thorsten1983 Themenstarter:in
147 Beiträge seit 2005
vor 18 Jahren

Ja sicher koennte die GUI ueber Remoting mit dem Dienst kommunizieren, allerdings laufen in dem Dienst x Timer in eigenen Threads die nur beim Dienst Start erstellt werden und erst beim Stoppen des Dioenstes disposed werden. Daher war es von anfang an angedacht, dass bei aenderungen die sich auf das Verhalten des Dienstes auswirken ein neustart des dienstes von noeten ist.

4.221 Beiträge seit 2005
vor 18 Jahren

Ich hab Dir ein wenig Code aus einer meiner Anwendungen zusammenkopiert


this.serviceControllerWanIPReader = new System.ServiceProcess.ServiceController();
// 
// serviceControllerWanIPReader
// 
this.serviceControllerWanIPReader.ServiceName = "WanIPReader"; //der Name des Services

private void cmdStartService_Click(object sender, System.EventArgs e)
{
	if (this.serviceControllerWanIPReader.Status==System.ServiceProcess.ServiceControllerStatus.Running)
	{
		MessageBox.Show("WanIPReader is already running","Status",MessageBoxButtons.OK,MessageBoxIcon.Error);
	}
	else
	{
		this.serviceControllerWanIPReader.Start(); //hier kannst Du auch Parameter übergeben
		this.serviceControllerWanIPReader.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running);
	}
}
private void cmdStopService_Click(object sender, System.EventArgs e)
{
	if (this.serviceControllerWanIPReader.Status==System.ServiceProcess.ServiceControllerStatus.Stopped)
	{
		MessageBox.Show("WanIPReader is already stopped","Status",MessageBoxButtons.OK,MessageBoxIcon.Error);
	}
	else
	{
		this.serviceControllerWanIPReader.Stop();
		this.serviceControllerWanIPReader.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped);
	}
}

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

T
Thorsten1983 Themenstarter:in
147 Beiträge seit 2005
vor 18 Jahren

genau das habe ich gesucht ...

danke