Feedback

C# - Gestartete und beendete Prozesse registrieren

Veröffentlicht von am 27.04.2014
(1 Bewertungen)
Diese kleine Konsolenanwendung listet in echtzeit die gestarteten und beendeten Prozesse mit einigen Basiseigenschaften auf. Die Auflistung erfolgt immer einen kurzen Moment nach dem eigentlichen Event.
Bei neu gestarteten Prozessen kann man über die PID ein Process-Objekt abfragen.

Zusätzlich benötigte Verweise
System.Management

Benötigte Namespaces
System
System.Management
System.Threading

Hinweise
Der Name der beendeten Prozesse ist bei mir (fast) immer maximal 14 Zeichen lang. Wenn jemand eine Idee dazu hat, immer her damit. Nur wenige Prozessnamen werden vollständig angezeigt.
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Entwickler - Kompakt

Nach Teilnahme an dieser Schulung kennen Sie alle wesentlichen Funktionen des TFS für Entwickler. Sie setzen Software-Entwicklung mit dem Visual Studio Team Foundation Server erfolgreich um.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Projektmitglieder - Kompakt

Nach Teilnahme an dieser Schulung sind Ihnen die Grundlagen von ALM geläufig. Sie planen und steuern Projekte effizient mit dem Visual Studio Team Foundation Server.

public static void Main()
{
    Console.ForegroundColor = ConsoleColor.Gray;
    Console.WriteLine("Dieses Programm registriert gestartete- und beendete Prozesse\n");
    Console.WriteLine("Drücken Sie eine beliebige Taste um das Programm zu beenden\n");

    Console.WriteLine(" Typ   ║ Prozessname                    ║ PID   ║ Exit       ║ Parent ║ Session");
    Console.WriteLine("       ║                                ║       ║ Status     ║ PID    ║ ID     ");
    Console.WriteLine(" ══════╬════════════════════════════════╬═══════╬════════════╬════════╬════════");

    ManagementEventWatcher startWatch = null;
    ManagementEventWatcher stopWatch = null;
    try
    {
        //Eventwatcher initilisieren
        startWatch = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
        startWatch.EventArrived += new EventArrivedEventHandler(processStart);
        startWatch.Start();
        stopWatch = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace"));
        stopWatch.EventArrived += new EventArrivedEventHandler(processStop);
        stopWatch.Start();
        while (!Console.KeyAvailable) Thread.Sleep(50);//Auf Benutzereingabe warten, um das Programm zu beenden.

    }
    catch (Exception ex)
    {
        Console.WriteLine("Leider ist ein Fehler aufgetreten.");
        Console.WriteLine("Fehlermeldung: {0}", ex.Message);
    }
    finally
    {
        //Eventwatcher wieder beenden
        if (startWatch != null)
            startWatch.Stop();
        if (stopWatch != null)
            stopWatch.Stop();
    }
}

static void processStop(object sender, EventArrivedEventArgs e)
{
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine(" Stopp ║ {0,-31}║ {1,5} ║ {2,10} ║ {3,6} ║ {4,7}",
        e.NewEvent.Properties["ProcessName"].Value,
        e.NewEvent.Properties["ProcessID"].Value,
        e.NewEvent.Properties["ExitStatus"].Value,
        e.NewEvent.Properties["ParentProcessID"].Value,
        e.NewEvent.Properties["SessionID"].Value);
}

static void processStart(object sender, EventArrivedEventArgs e)
{
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine(" Start ║ {0,-31}║ {1,5} ║ {2,10} ║ {3,6} ║ {4,7}",
        e.NewEvent.Properties["ProcessName"].Value,
        e.NewEvent.Properties["ProcessID"].Value,
        "-",
        e.NewEvent.Properties["ParentProcessID"].Value,
        e.NewEvent.Properties["SessionID"].Value);
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!