WMI FileSystemWatcher - Methode .NextEvent() kann nicht manuell verlassen werden

    • Offizieller Beitrag

    Um die Dateien eines Ordner auf Veränderungen zu überwachen (Neu, Löschen, Verändern) habe ich unter Verwendung von WMI ein Skript erstellt. Es funktioniert auch tadellos.
    Einziger Makel: Um es Beenden zu können benötige ich vorher zwingend ein Ereignis. Ursache ist die Methode .NextEvent(). Wird diese aufgerufen verweilt der Programmablauf dort bis zum Eintreten eines Events, welches im festgelegten Intervall dort abgefragt wird.
    Hat jemand von euch eine Idee, wie ich aus der Falle heraus komme?
    Aus dem Skript heraus kann ich keinerlei Aktion ausführen, da ich in der Methode bin. ?(

    • Offizieller Beitrag

    Da habe ich auch keine Lösung, aber muss es unbedingt WMI sein?

    Mit _WinAPI_ShellChangeNotifyRegister könnte man das Problem doch auch lösen:

    • Offizieller Beitrag

    Hast du irgendwo eine Übersicht für die Events?
    Folgendes habe ich durch Ausprobieren gefunden, aber nichts auf MSDN.

    • Offizieller Beitrag

    Das müssten diese hier sein (aus <APIShellExConstants.au3>):

  • Hat jemand von euch eine Idee, wie ich aus der Falle heraus komme?
    Aus dem Skript heraus kann ich keinerlei Aktion ausführen, da ich in der Methode bin.


    Eine Lösung hierfür wäre es denn betreffenden Code in eine separate EXE auszulagern und diesen Prozess zu killen wenn die Ordnerüberwachung beendet werden soll. Oder du verwendest wie vorgeschlagen die WinAPI Variante. ;)

  • NextEvent hat einen TimeOut-Parameter: Mit $objEvent = $colEvents.NextEvent(1000) wartet die Methode 1 Sekunde lang.

    Allerdings triggert sie danach auch einen TimeOut-Error, welcher mit einem Eventhandler abgefangen werden muss. (Sonst stürzt das Script ab...)
    Am besten das Beispiel zu ObjEvent hernehmen:
    $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")