Ermitteln der Start und Ausschaltzeit eines Rechners


Wer mal genauer Wissen muss, wann sein Rechner gestartet oder heruntergefahren wurde, der kann ab Windows NT in der Ereignisanzeige nachschauen.

Dort werden unter System und der Quelle EventLog die Ereignisse 6005, 6006 mitprotokolliert. Bei Ereignis 6005 wird der Ereignisprotokolldienst gestartet und bei 6006 beendet. Diese beiden Punkte spiegeln zwar nicht exakt den Zeitpunkt des Ein- oder Ausschalten wider aber es ist hinreichend genau. Das Ereignis 6008 protokolliert ein unerwartetes Herunterfahren des Rechners.

Das Problem war jetzt nur, die Werte sollten von einem unbedarften Benutzer gelesen werden können. Man könnte nun eine lange Anleitung dazu schreiben oder die Sache kurz mit dem .Net Framework 2.0 erledigen.

Es wurde unter Windows XP SP2 sowie Windows Vista Beta2 getestet und kommt ohne Adminrechte aus.

 

Der Sourcecode sieht so aus (leider verstellt durch WordPress und LiveWriter):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace SystemStartLog
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
List<string> logEintraege = new List<string>();
long eventID = 0;

if (System.Diagnostics.EventLog.Exists("System"))
{
eventLog1 = new System.Diagnostics.EventLog("System");
foreach (EventLogEntry entry in eventLog1.Entries)
{
// EventID-Property soll nicht mehr verwendet werden
// statt dessen soll InstanceID verwendet werden, um
// aber einen brauchbaren Wert zu erhalten muss man
// die obersten 2Bits ausblenden:
eventID = entry.InstanceId & 0x3FFFFFFF;

if (entry.Source == "EventLog" && eventID > 6004 && eventID < 6009)
logEintraege.Add(entry.TimeGenerated.ToShortDateString() + " " + entry.TimeGenerated.ToShortTimeString() + "\t" + entry.Message);
}

// Reihenfolge umdrehen
logEintraege.Reverse();

// Einträge in Listbox aufnehmen
foreach (string eintrag in logEintraege)
listBox1.Items.Add(eintrag);
}

}
}
}

Wichtig: Bei obigem Code gibt man für den Parameter logname die englische Bezeichnung an, somit wird "Anwendungen" zu "Application". War in der MSDN nirgends genau beschrieben.

Auch der Hinweis vom VS2005-Compiler dass anstatt EventID InstanceID verwendet werden soll war nicht näher dokumentiert. Infos zur Maskierung und was InstanceID für einen Wert repräsentiert findet man unter:
http://msdn.microsoft.com/library/default.asp?url=…

Hier noch ein Artikel mit Bildern (allerdings Win2000):

http://www.microsoft.com/technet/prodtechnol/
windows2000serv/maintain/monitor/monitorrel.mspx

Die Beschreibung der Eventlog-Klasse gibts hier:

http://windowssdk.msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx

Eine Antwort to “Ermitteln der Start und Ausschaltzeit eines Rechners”

  1. Quirel Says:

    Bei Linuxsystemen stehen solche Infos unter /var/log/auth.log

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s


%d Bloggern gefällt das: