![]() |
Prüfen, ob Datei gesperrt ist
Hallo,
ich weiß, dass dieses Thema bereits im Forum besprochen wurde, aber die Funktion
Delphi-Quellcode:
unter
IsFileInUse()
![]() Ich habe ein Testprogramm, dass bei mir die Datei test.txt exklusiv öffnet.
Code:
Versuche ich die Datei im Texteditor zu öffnen, bekomme ich die Meldung, dass sie nicht geöffnet werden kann.
try
fs := TFileStream.Create('C:\test.txt', fmShareExclusive); except fs := nil; //damit fs.Free keine Exception wirft exit; end; Soweit so gut. Mein zweites Programm soll das überprüfen:
Code:
Leider gibt das Programm immer Alles OK. aus.
if IsFileInUse('C:\test.txt') = false then
Showmessage('Alles ok.') else Showmessage('Die Datei ist gesperrt.'); Kann mir einer auf die Sprünge helfen, woran das liegen könnte? Danke. |
AW: Prüfen, ob Datei gesperrt ist
Glaskugel auspack: Du hast Win7/Vista mit aktivem UAC und deine Anwendung hat kein passendes Manifest um die Virtualisierung des Dateisystems abzuschalten.
|
AW: Prüfen, ob Datei gesperrt ist
Mal ins Blaue geschossen: Windows 7 und UAC??
|
AW: Prüfen, ob Datei gesperrt ist
Ja, ich habe Win7 mit UAC.
Zitat:
Was muss ich tun, um die Virtualisierung zu umgehen? |
AW: Prüfen, ob Datei gesperrt ist
Bin keine Profi warte aber auch grade auf ne Antwort.
Vielleicht passt das : ![]() Musst ein bischen scrollen. Hoffe englsich passt... |
AW: Prüfen, ob Datei gesperrt ist
Hallo Ihr!
Vor einem ähnlichen Problem stehe, eher stand ich auch, und zwar ist es einer gehookten DLL unter Windows 7 64 Bit i.d.R. unmöglich, auf eine Datei lesend zuzugreifen, außer, wenn das Programm, das den Hook installiert hat (Hostprogramm?), diesen Hook auslöst. Deshalb waren die Hinweise hier nützlich, doch Änderungen an der UAC brachten auch nach Neustart bei mir keinen Erfolg. Datei kann nicht zum Lesen geöffnet werden, der Fehlercode von IOResult=5 ("Kein Dateizugriff möglich", das kam mir auch vorher schon so vor). Insofern werde ich es wohl mit sog. "Memory Mapped Files" probieren, vielleicht funktioniert es ja damit. |
AW: Prüfen, ob Datei gesperrt ist
Also, ich dachte ich muss wegen der Virtualisierung noch etwas ins Manifest hinzufügen.
Aber ich nutze ja derzeit das folgende Manifest als eigebundene Ressource.
Code:
@Delphi-Laie: Ich habe nicht das Problem, dass ich nicht zugreifen kann. Ganz im Gegenteil, es wird zurückgegeben, dass man auf die Datei zugreifen kann, obwohl sie gesperrt ist.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="Mein Programm" processorArchitecture="x86" version="1.0.0.0" type="win32"/> <description>Programmbeschreibung</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level = "asInvoker" uiAccess = "false" /> </requestedPrivileges> </security> </trustInfo> </assembly> |
AW: Prüfen, ob Datei gesperrt ist
Was sagt der Taskmanager zu deinem Prozess (Spalte "UAC-Virtualisierung") und was sagt der Taskmanager zu dem anderen Prozess der sperren soll?
|
AW: Prüfen, ob Datei gesperrt ist
Bei beiden Programmen ist die UAC-Virtualisierung deaktiviert.
|
AW: Prüfen, ob Datei gesperrt ist
Zitat:
|
AW: Prüfen, ob Datei gesperrt ist
@Delphi-Laie
Das liest sich als würdest Du noch die "alten" Dateifunktionen nutzen. Ggf. hilft die Filemode:=0 weiter. Gruß K-H |
AW: Prüfen, ob Datei gesperrt ist
Zitat:
|
AW: Prüfen, ob Datei gesperrt ist
So, jetzt wird es kurios :o
Ich habe soeben die Funktion in meinem Programm unter XP und Vista ausprobiert und dabei versucht, auf geöffnete Excel-Dateien zuzugreifen. Und ja, die Funktion hat richtig zurückgegeben, wenn diese in Benutzung waren. Also habe ich noch einmal unter meinem Windows 7 probiert. Nichts, das Programm hat immer zurückgegeben, dass die Dateien nicht gesperrt wären. Ich war schon am Verzweifeln und habe die exe-Datei auf dem Desktop abgelegt. Wenn ich diese von dort starte, funktioniert es wie gewünscht. Das Programm mit der Funktion IsFileInUse() funktioniert. Aber kann mir einmal einer erklären, warum es abhängig davon ist, wo meine ausführbare Datei liegt? Das macht doch keinen Sinn. Danke. |
AW: Prüfen, ob Datei gesperrt ist
Hast Du es mal mit
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz