Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Reaktion auf das Öffenen eines Programms, aber wie?
Narrow
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Österreich

Themenstarter:

Reaktion auf das Öffenen eines Programms, aber wie?

beantworten | zitieren | melden

Hi Leute,
gleich zum Anfang, ich bin neu hier, also ned böse sein falls ich im falschen Bereich poste.

Also zu meinem Problem,

Ich würde gerne ein Programm programmieren, dass aufzeichnet, wann irgendein Programm gestartet wird und für wie lange es geöffnet ist (ähnlich TaskManager).
Leider habe ich keine Ahnung wie ich eine Reaktion bekomme wenn ein anderes Programm gestartet wird...

falls das zu unverständlich war, es sollte ungefähr so aussehen:


if ( User.Opens.AnyProgramm )
{
     ...
}

gibts dafür einen eigenen Befehl für "User.Opens.AnyProgramm" oder ist das etwas komplizierter?

MfG Narrow
private Nachricht | Beiträge des Benutzers
Borg
myCSharp.de - Member



Dabei seit:
Beiträge: 1548
Herkunft: Berlin, Germany

beantworten | zitieren | melden

Das kann Windows auch mit Bordmitteln.

Zuerst musst du in "Lokale Sicherheitsrichtlinie\Sicherheitseinstellungen\Lokale Richtlinien\Überwachungsrichtlinie" die Überwachung "Prozessverfolgung überwachen" für "Erfolgreich" aktivieren.

Dadurch wird im Sicherheitslog ein Ereignis mit der Kennung 592 erzeugt, wenn ein neuer Prozess gestartet wurde, nach dem Beenden mit der Kennung 593.
Alles, was dein Programm dann noch tun muss, ist das Sicherheitslog zu überwachen.
private Nachricht | Beiträge des Benutzers
Narrow
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Danke erstmal für die schnelle antwort,

ich kann mir jetzt ja die Ereignisse in der Ereignisanzeige ansehen, aber wie kann ich die jetzt in mein Programm einbinden bzw. wo werden die log-dateien gespeichert?
Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von Narrow am .
private Nachricht | Beiträge des Benutzers
Grollicus
myCSharp.de - Member



Dabei seit:
Beiträge: 59

beantworten | zitieren | melden

Also wenn ich mich recht erinner müsste man da mit WMI 'dran kommen.
Ist lange her, daher kann ich dir nur son Schlagwort geben.
Aber vielleicht hilfts ja
private Nachricht | Beiträge des Benutzers
Borg
myCSharp.de - Member



Dabei seit:
Beiträge: 1548
Herkunft: Berlin, Germany

beantworten | zitieren | melden

Mittels System.Diagnostics.EventLog.

EventLog myLog = new EventLog( "Security" );
myLog.EntryWritten += new EntryWrittenEventHandler( myLogWatcher );
myLog.EnableRaisingEvents = true;

// ...

public void myLogWatcher( object sender, EntryWrittenEventArgs e )
{
   // alles über das Event steckt in e.Entry (soll heißen: Breakpoint und einfach mal schauen...
   switch( e.Entry.InstanceID )
   {
      case 592: // Prozess gestartet
         // was auch immer
         break;
      case 593: // Prozess beendet
         // was auch immer
         break;
      default:
         return;
   }
}

EDIT: Achtung, zum Auslesen des Sicherheitslog braucht man Admin- oder System-Rechte. Am besten ist es also, das ganze in einen Service auszulagern.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Borg am .
private Nachricht | Beiträge des Benutzers
Narrow
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Ah, danke für die Hilfe, kannte mich mit der Materie kaum aus.
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Narrow am .
private Nachricht | Beiträge des Benutzers