Dienste programmieren mit .NET

Notifizierungs-Icon

Zunächst zur Dialogbox und dem Notifizierungs-Icon: Dazu legen Sie einfach eine neue "Windows-Forms"-Anwendung an. Auf das Form ziehen Sie einen Timer und ein "NotifyIcon"-Objekt, dem Sie auch noch ein Icon zuweisen können. Die Timer-Behandlung wird nur einmal durchgeführt. Beim ersten Timer-Event setzt der Code den Timer auf "Disabled" und versteckt die Dialogbox. Dadurch wird sie direkt nach dem Start unsichtbar:

private void OnElapsed(object sender, System.Timers.ElapsedEventArgs e)
{
this.timer1.Enabled = false;
this.Hide();
}

Um die Dialogbox wieder sichtbar zu machen, brauchen Sie einen EventHandler für das Event DoubleClick des NotifyIcon-Objekts. In diesem Handler machen Sie die Dialogbox wieder sichtbar:

private void OnDblClick(object sender, System.EventArgs e)
{
this.Show();
}

Dann brauchen Sie noch einen Button auf dem Form, mit dem Sie den Zustand des Dienstes auf pausiert setzen können. Hierzu benötigen Sie aber auch Zugriff auf den Dienst selbst. Den erhalten Sie über ein passendes ServiceController-Objekt: Öffnen Sie den Server-Explorer in Visual Studio und dann die Liste der Dienste auf dem lokalen Rechner.

Dort finden Sie auch den eigenen TestService. Über das Objektmenü des Dienstes fügen Sie ihn zum Designer dazu. Das Form bekommt dann eine neue Member-Variable, mit der Sie Zugriff auf den Dienst haben.

Im Eventhandler des Buttons können Sie diese Variable verwenden, um den Dienst zu pausieren oder wieder weiterlaufen zu lassen:

private void button3_Click(object sender, System.EventArgs e)
{
if( this.serviceController1.CanPauseAndContinue)
{
System.ServiceProcess.ServiceControllerStatus s = this.serviceController1.Status;

if( s == System.ServiceProcess.ServiceControllerStatus.Running)
{
this.serviceController1.Pause();
}
else
{
this.serviceController1.Continue();
}
this.Hide();
}
}