Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Prüfen, ob Datei gesperrt ist (https://www.delphipraxis.net/163025-pruefen-ob-datei-gesperrt-ist.html)

amigage 13. Sep 2011 12:21

Prüfen, ob Datei gesperrt ist
 
Hallo,

ich weiß, dass dieses Thema bereits im Forum besprochen wurde, aber die Funktion
Delphi-Quellcode:
IsFileInUse()
unter http://www.delphipraxis.net/67631-ue...zt-werden.html funktioniert bei mir nicht.

Ich habe ein Testprogramm, dass bei mir die Datei test.txt exklusiv öffnet.

Code:
  try
    fs := TFileStream.Create('C:\test.txt', fmShareExclusive);
  except
    fs := nil; //damit fs.Free keine Exception wirft
    exit;
  end;
Versuche ich die Datei im Texteditor zu öffnen, bekomme ich die Meldung, dass sie nicht geöffnet werden kann.
Soweit so gut.

Mein zweites Programm soll das überprüfen:

Code:
if IsFileInUse('C:\test.txt') = false then
  Showmessage('Alles ok.')
else
  Showmessage('Die Datei ist gesperrt.');
Leider gibt das Programm immer Alles OK. aus.

Kann mir einer auf die Sprünge helfen, woran das liegen könnte?
Danke.

Bernhard Geyer 13. Sep 2011 12:34

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.

arnold mueller 13. Sep 2011 12:36

AW: Prüfen, ob Datei gesperrt ist
 
Mal ins Blaue geschossen: Windows 7 und UAC??

amigage 13. Sep 2011 13:08

AW: Prüfen, ob Datei gesperrt ist
 
Ja, ich habe Win7 mit UAC.
Zitat:

hat kein passendes Manifest um die Virtualisierung des Dateisystems abzuschalten.
Möglich, ich nutze die in Delphi 2009 integrierte Funktion "Laufzeit-Theme aktivieren".
Was muss ich tun, um die Virtualisierung zu umgehen?

sott1981 13. Sep 2011 13:16

AW: Prüfen, ob Datei gesperrt ist
 
Bin keine Profi warte aber auch grade auf ne Antwort.

Vielleicht passt das : Vista's User Account Control Handling



Musst ein bischen scrollen. Hoffe englsich passt...

Delphi-Laie 13. Sep 2011 13:44

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.

amigage 13. Sep 2011 13:47

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:
<?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>
@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.

Bernhard Geyer 13. Sep 2011 14:03

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?

amigage 13. Sep 2011 14:16

AW: Prüfen, ob Datei gesperrt ist
 
Bei beiden Programmen ist die UAC-Virtualisierung deaktiviert.

Delphi-Laie 13. Sep 2011 14:22

AW: Prüfen, ob Datei gesperrt ist
 
Zitat:

Zitat von amigage (Beitrag 1123990)
@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.

Dann war ich etwas flüchtig beim Lesen - also stehe ich nicht vor einem ähnlichen, sondern vor dem inversen Problem, möchte das hier aber nicht weiter detaillieren, es ist ja schließlich nicht meine Diskussion.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz