Knowledge Base Nr: 00321 windowsservice.cs - http://www.swe-kaiser.de

Downloads:

.NET/c#: windows service erstellen und debuggen, systemeventlog schreiben

  
code erstellen:
- neu|project|andere sprachenvisual c#|windows windows dienst
- service1.cs umbenennen und in design ansicht:
- contextmenu|properties: name und servicename ändern
- contextmenu|installer hinzufügen
- ProjectInstaller.cs in design ansicht öffnen:
- properties serviceProcessInstaller1:
account: LocalService
- properties serviceInstaller1:
displayname, deascription, servicename, starttype setzen
- in Service1.cs code implementieren

installieren:
- InstallUtil.exe suchen und zu exe kopieren
z.b.: copy C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe .
- installieren InstallUtil.exe krService.exe
- deinstallieren InstallUtil.exe krService.exe -u

debuggen:
- dienst über control-panel starten
- in vs debuggen|an den prozess anhängen
- prozesse aller benutzer anzeigen
- anfügen

beispielcode:

public partial class krService : ServiceBase
{
public krService()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
EventLog.WriteEntry("krService startet", EventLogEntryType.Information, 1, 4711);
}

protected override void OnStop()
{
EventLog.WriteEntry("krService stopped", EventLogEntryType.Information, 2, 4712);
}
}

beispielcode auswertung eventlog:

private void RefreshList()
{
EventLog log = new EventLog("Application");
String sItem;
DateTime tStart = DateTime.MinValue;
DateTime tStop = DateTime.MinValue;
TimeSpan tDiff;
int nHour = Convert.ToInt32(textBoxHour.Text);
int nMin = Convert.ToInt32(textBoxMin.Text);
TimeSpan tDiffComp = new TimeSpan(nHour, nMin, 0);

listBox1.Items.Clear();

foreach (EventLogEntry item in log.Entries)
{
if (item.Source != "krService")
continue;

if (item.CategoryNumber == 4711) //started
tStart = item.TimeGenerated;
if (item.CategoryNumber == 4712) //stopped
tStop = item.TimeGenerated;

if ((tStart != DateTime.MinValue) && (tStop != DateTime.MinValue))
{
tDiff = tStop - tStart;
sItem = tStart.ToString() + " - " + tStop.ToString() + " : " + tDiff.ToString();
if (tDiff > tDiffComp)
sItem += "\t <<<<<<<<<<<< länger als " + nHour.ToString() + ":" + nMin.ToString() + "!!!";

int i = listBox1.Items.Add(sItem);

tStart = tStop = DateTime.MinValue;
}
}
}