In C++ (speziell Visual C++), manchmal können Sie eine Datei nicht öffnen, weil eine andere ausführbare Datei geöffnet hat und es nicht für Lesevorgänge freigegeben. Wenn ich versuche, eine solche Datei zu öffnen, wie kann ich dann programmatisch herausfinden, wer die Datei sperrt?Win32-Dateien zum Lesen gesperrt: wie Sie herausfinden, wer sie sperrt
Antwort
In Windows 2000 und höher, können Sie dies ohne Verwendung eines Kernel-Modus-Treibers nicht tun. Process Explorer und andere ähnliche Tools laden automatisch einen Treiber, um dies zu erreichen. Dies liegt daran, dass sich die Datei-Handles im Kernel-Bereich befinden und von Anwendungen im Benutzermodus (EXE-Dateien) nicht zugegriffen werden kann. Wenn Sie wirklich daran interessiert sind, werfen Sie einen Blick auf this project.
Der MSDN-zugelassene Weg ist IFileIsInUse::GetAppName()
. Benötigt Vista, obwohl.
Dies scheint die Zusammenarbeit mit dem Programm zu erfordern, das eine Datei geöffnet hat, die nicht mit dem übereinstimmt, was gefragt wird. – Mehrdad
Es ist der informationsreichste Weg, weshalb Sie es zuerst versuchen sollten. – MSalters
Sicher, es ist nicht schaden, es zu versuchen, aber die Chancen, dass es funktioniert, sind sehr gering, so dass das OP wahrscheinlich eine Alternative unabhängig davon benötigen wird. – Mehrdad
- 1. So finden Sie, wer sperrt, wer in SQL Server 2005
- 2. Kommandozeilen-Tool zum Herausfinden, wer eine Datei sperrt
- 3. Wie können Sie herausfinden, welche Prozesse Ordner oder Datei gesperrt haben?
- 4. Bestimmen Sie, wer ein Ereignis
- 5. Wie sperrt man die Optionen zum Zurückspulen/Weiterleiten?
- 6. Wer ist "uns" und wer ist "sie" laut Git?
- 7. Wie sperrt man einen Stream?
- 8. Android - Datenbank ist gesperrt
- 9. Erhalten Sie Telefonausrichtung, wenn Sie in einer Ausrichtung gesperrt sind
- 10. Herausfinden, wer die meisten Builds in Teamcity zerstört hat
- 11. Oracle.ManagedDataAccess-Nuggetpaket sperrt web.config nach Wiederherstellung
- 12. Wie kann ich eine Textdatei lesen, ohne sie zu sperren?
- 13. Sehen Sie, wer git Tag gelöscht
- 14. Boolesche Animation sperrt Eigenschaft
- 15. Abfragetext herausfinden, bevor Sie ExecuteNonQuery() ausführen
- 16. Benutzerdefinierte MSBuild Task sperrt Assembly
- 17. Wie können Sie Textdateien lesen?
- 18. Wie finden Sie heraus, wer der ROM-Anbieter ist?
- 19. Überprüfen Sie, wer Sie mit Twitter API blockiert
- 20. Können Sie das Passwort-Hash-Schema herausfinden?
- 21. "Erfinden Sie niemals solche Namen; verwenden Sie sie nur wie dokumentiert." Wer?
- 22. Ermitteln Sie den COM-Port, an dem ein Gerät sperrt
- 23. DeadLock-Prozess Welches sperrt zuerst?
- 24. Wie batchUpdate Tabellen/Zeilen sperrt
- 25. So erstellen Sie einen sofortigen Ort zum Lesen mit GPS
- 26. Überprüfen Sie, ob ein pthread Mutex gesperrt oder entsperrt (Nachdem ein Thread selbst gesperrt hat)
- 27. Wie Sie herausfinden, dass die Anwendung aktualisiert wurde
- 28. Wie kann eine Stapeldatei herausfinden, wo sie sich befindet?
- 29. Wie können Sie herausfinden, welches Betriebssystem der Benutzer ausführt?
- 30. So verwenden Sie POI SXSSF zum Lesen einer großen Tabelle
Sie können sehen, dass Process Explorer einen Treiber lädt, indem Sie auf die DLLs des 'System'-Prozesses schauen; Sie werden sehen, dass ein Treiber wie 'PROCEXP113.SYS' geladen ist. –