Explorer-Handle auf Ordner kappen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Explorer-Handle auf Ordner kappen

    Hallo Experten

    Ich hab eine Anwendung geschrieben, die unter vielem anderem von Ordnern, welche ich als Argumente übergebe, das Änderungsdatum mittels Directory.SetLastWriteTime(...) überschreibt. Wurde dieser Ordner allerdings vorgängig z.B. in Windows umbenannt, ist im Windows-Explorer immer noch ein Handle auf diesen Ordner aktiv (wie mir die Freeware "Unlocker" bestätigt), und der obige VB-Befehl in meiner Anwendung misslingt dann (Fehler "Datei wird von einem anderen Prozess verwendet"). Irgendwelche Ideen oder Links, wie ich in meinem Programm den Handle des Explorers kappen könnte?

    Danke jetzt schon

    Bernhard
    Kannst du mal den Code posten damit man es nachvollziehen kann ?

    & hast du den Ordner im Explorer geöffnet ? hatte da auch mal Probleme mit.
    dann wäre da noch mit Admin-Rechten ausprobieren, macht das einen Unterschied ?

    HardcoreMethode: eplorer killen, umbennen, wieder starten :cursing:
    Also, nochmals in anderen Worten und nochmals vereinfacht: In meinem Programm steht die Zeile

    VB.NET-Quellcode

    1. Directory.SetLastWriteTime("C:\test", New DateTime(2000, 1, 1, 0, 0, 0))

    Das funktioniert wie gewünscht, AUSSER wenn ich vor Ausführung meines Programms z.B. im Windows-Explorer den Ordner "C:\test" um- und wieder zurückbenenne, dann bricht das Programm an dieser Stelle ab mit der Fehlermeldung "Datei wird von einem anderen Prozess verwendet". Problem wäre gelöst, wenn ich - wie ich das mit der Freeware "Unlocker" machen kann - in meinem Programm den offenen Handle des Explorers auf "C:\test" killen könnte. Dann funktioniert mein Programm wieder, wie ich ausgetestet habe.

    Bernhard

    Grüter schrieb:

    Das funktioniert wie gewünscht, AUSSER wenn ich vor Ausführung meines Programms z.B. im Windows-Explorer den Ordner "C:\test" um- und wieder zurückbenenne


    Ich hab das nun mit deinem Code getestet und kann den Fehler nicht reproduzieren. Ich kann die Datei auch danach das Änderungsdatum bearbeiten. Sicher das nicht noch was anderes darauf zugreift? zB der Unlocker selbst oder eine andere Stelle aus deinem Programm ?

    Grüter schrieb:

    wenn ich vor Ausführung meines Programms
    Heißt das, dass Du Dir die Verzeichnisse holst, in der Zwischenzeit die Kohlen in den Keller schaufelst, während der Weihnachtsmann aus Versehen ein gelistetes Verzeichnis umbenennt?
    Hole Dir die Verzeichnisse, nachdem Du Dir die vom Kohleschaufeln schmutzigen Hände gewaschen und hinter dem Weihnachtsmann die Türe geschlossen hast.
    also nach dem Druck auf den Button DoIt. :P
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo Pantsuu

    Echt? Dann hab ich kein VB-Problem, sondern ein Windows-Problem! Wenn ich in WIN7 einen Ordner "Neuer Ordner" erzeuge, und ihn in "test" umbenenne, habe ich danach zwei offene Handles vom Explorer, siehe Screenshot anbei. Kann mir jemand bestätigen, dass das NICHT der Normalfall ist? Danke!

    Gruss

    Bernhard
    Bilder
    • Handle.png

      28,2 kB, 652×232, 142 mal angesehen
    Hallo Murdock & Rod

    @Murdock: Danke für die interessanten Links - nur nützen sie mir nichts. 1) Der Prozess, der den Ordner nicht freigibt, ist bei mir immer der Windows-Explorer. 2) Ich will den nicht freigegebenen Ordner nicht löschen, sondern nur den Explorer-Handle killen - Unlocker kann dies...

    @Rod: Ich glaub, wir reden nicht vom gleichen. Der Anwender meines Programms muss einen neuen Ordner erzeugen, ihn umbenennen, ihn mit bestimmten Dateien füllen und DANN mein Programm darauf anwenden. Wegen dem nicht freigegebenen Explorer-Handle gibt's dann aber beim automatischen Datum-Setzen Probleme - zumindest auf meinem Computer.

    Danke für das Mitdenken

    Bernhard
    Alsooo ich hab jetzt mal bisschen getestet und bestätigt was ich mir vorher gedacht habe.
    ​& hast du den Ordner im Explorer geöffnet ? hatte da auch mal Probleme mit.


    Schließe mal deinen Ordner bevor du ihn bearbeitest. Also im Windows Explorer. Oder muss der zwingend geöffnet sein ?
    ... der Ordner ist (ganz sicher!) nicht geöffnet. Um den Screenshot in Posting #6 zu schiessen, habe ich einen neuen Ordner auf dem Desktop erzeugt, ihn sogleich umbenannt und dann Unlocker aufgerufen. Den Ordner habe ich nie doppeltgeklickt...

    Dank dem Tipp von Murdock habe ich aber gesehen, dass es eine API namens "CloseHandle" gibt. Jetzt muss ich wohl nur noch die beiden Handle-Nummern herausbekommen, dann kann ich dasselbe in meinem Programm machen, was Unlocker als selbständiges Programm macht.

    Bernhard
    Noch zwei interessante Details:

    - ProcessExplorer (von Sysinternals) bestätigt, dass nach einem Umbenennen eines Ordners im Windows-Explorer (zumindest auf meinem Computer) reproduzierbar zwei Handles offen bleiben.
    - Ich kann per VB-Programm einen solchen Ordner umbenennen, aber nicht sein Datum ändern.

    Bernhard

    Grüter schrieb:

    wir reden nicht vom gleichen.
    Ja, hab ich auch gerade gemerkt. Sorry.
    Mit dem Unlocker hab ich noch nicht gearbeitet. Kann man den refreshen oder resetten?
    Warum muss das Verzeichnis umbenannt werden? Gib ihm doch gleich den richtigen Namen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    und kann das nicht Fehler verursachen, wenn der Unlocker dem Explorer die Handle kappt, und dann der Ordner umbenannt wird? Die Sperre hat doch evtl. auch einen Sinn!
    Weil dann zeigt der Explorer ja auf einmal einen Ordner an, den's nicht gibt - da würd ich erstmal testen, ob das nicht zu Abstürzen an anderer Stelle führt.
    Hab mich jetzt für einen Work-Around entschieden: Ordner kopieren, bei diesem das Datum ändern, alter Ordner löschen und neuen Ordner in alten umbenennen - das löst das Problem auch, auch wenn dann der Ordner sich auf dem Desktop plötzlich an einem anderen Ort befindet...
    Somit Thread beendet.

    Danke an alle

    Bernhard