Autor |
Beitrag |
pibesumse
Hält's aus hier
Beiträge: 15
|
Verfasst: Do 22.09.11 22:03
Hallo liebe Freunde,
wenn ich eine datei löchen möchten,
Display eine Meldung wie diese kommt: "Ein anderes Programm verwendet die Datei, das kann man nicth löschen"
meine frage ist; Wie kann ich wissen, welches Programm diese Datei verwendet ?
Vielen Dank im Voraus. Moderiert von Narses: Topic aus VCL (Visual Component Library) verschoben am Do 22.09.2011 um 22:21
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 23.09.11 01:28
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
rushifell
      
Beiträge: 306
Erhaltene Danke: 14
|
Verfasst: Fr 23.09.11 06:25
Hast Du den Rechner schonmal neu gestartet und dann versucht, die Datei zu löschen?
|
|
pibesumse 
Hält's aus hier
Beiträge: 15
|
Verfasst: Fr 23.09.11 08:08
Ich spreche nicht gut Deutsch,
Wenn ich falsch schreibe,Verzeihen Sie mich,
Lieber rushifell,
Ich habe es nicht ausprobiert aber auch
Ich möchte nicht den Computer neu starten.
weil,Einige Programme beim Start ausgeführt werden.
und Lieber Xion
Ich installierte das Programm.
Weisst du wie kann ich diesen Prozess mit Delphi-Codes machen ?
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Fr 23.09.11 09:10
Ich denke, es wäre wichtig zu wissen, um was für eine Datei es sich überhaupt handelt.
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 23.09.11 09:13
Ich weiß nicht, ob das so eine gute Idee ist, eine Datei löschen zu wollen, die offenbar von einem anderen Programm gerade genutzt wird. Wir nennen das im Deutschen, jemanden den Teppich unter den Füßen wegziehen.
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Fr 23.09.11 09:16
Deswegen würde ich ja gerne wissen, was das für eine Datei ist.
Ist es eine Datei, die von einem selbst geschriebenen Programm, welches seit Stunden hängt offen gehalten wird?
Gehört die Datei zu einem wichtigen Programm?
Oder ist das nur die Sperrdatei eines lustigen Schadprogramms?
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 23.09.11 11:39
Ich habe diese Meldung auch öfter. Besonders bei gerade neu erstellten Dateien oder Ordnern (z.B. aus einem heruntergeladenen Archiv entpackt), die ich umbenennen (oder auch einzelne Dateien aus dem Archiv) löschen möchte. Da blockiert unter Windows 7 regelmäßig und ausdauernd der Explorer die Dateien, bzw. vermutlich der Indizierungsdienst oder sowas in der Art.
Mit dem Unlocker, der oben verlinkt ist, lassen sich diese Sperren aufheben, und die Dateien lassen sich bearbeiten/umbenennen/löschen.
Wie man das selbst umsetzt, weiß ich aber leider nicht.
_________________ We are, we were and will not be.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 23.09.11 13:33
Um die ursprüngliche Frage zu beantworten:
Dafür gibt es den Process Explorer.
technet.microsoft.co...ysinternals/bb896653
Über die Suche lassen sich die Handles auf eine Datei finden.
In Delphi kann man das genauso machen, nämlich indem man alle Prozesse und alle Handles usw. dieser Prozesse durchläuft. Dann muss man nur noch den Dateinamen zu einem Handle herausfinden und vergleichen, ob es die gesuchte Datei ist.
Stichworte: NtQueryObject, NtQuerySystemInformation
// EDIT:
Gausi hat folgendes geschrieben : | Ich habe diese Meldung auch öfter. [...] Da blockiert unter Windows 7 regelmäßig und ausdauernd der Explorer die Dateien, bzw. vermutlich der Indizierungsdienst oder sowas in der Art. |
Das sind eingeklinkte Viewer oder andere Extensions. Auf einem frischen System hatte ich das noch nie. Nur, wenn ich da solche Tools installiere, passiert das dann. Bei meinen eigenen Extensions ist das anfangs auch manchmal passiert. 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 23.09.11 13:52
jaenicke hat folgendes geschrieben : | Um die ursprüngliche Frage zu beantworten:
Dafür gibt es den Process Explorer.
technet.microsoft.co...ysinternals/bb896653
Über die Suche lassen sich die Handles auf eine Datei finden.
In Delphi kann man das genauso machen, nämlich indem man alle Prozesse und alle Handles usw. dieser Prozesse durchläuft. Dann muss man nur noch den Dateinamen zu einem Handle herausfinden und vergleichen, ob es die gesuchte Datei ist. |
Nein, lässt es sich nicht. Nicht umsonst installiert der ProcessExplorer einen Treiber.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| function GetFileNameByHandle(FileHandle: THandle): string; var FileNameInfo : TFileNameInformation; ObjectNameInfo : TObjectNameInformation; IoStatusBlock : TIOStatusBlock; res, dwReturn : DWORD; begin result := ''; res := NtQueryInformationFile(FileHandle, @IoStatusBlock, @FileNameInfo, SizeOf(FileNameInfo.FileName), FileNameInformation); if res = STATUS_SUCCESS then begin res := NtQueryObject(FileHandle, ObjectNameInformation, @ObjectNameInfo, SizeOf(ObjectNameInfo.Name.Buffer), @dwReturn); if res = STATUS_SUCCESS then begin SetLength(result, MAX_PATH); SetLength(result, WideCharToMultiByte(CP_ACP, 0, @ObjectNameInfo.Name.Buffer[ObjectNameInfo.Name.MaximumLength - ObjectNameInfo.Name.Length], ObjectNameInfo.Name.Length div SizeOf(WideChar), @result[1], MAX_PATH, nil, nil)); end else begin SetLength(result, MAX_PATH); SetLength(result, WideCharToMultiByte(CP_ACP, 0, @FileNameInfo.FileName[0], FileNameInfo.FileNameLength div SizeOf(WideChar), @result[1], MAX_PATH, nil, nil)); end; end; end; |
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 23.09.11 16:19
Luckie hat folgendes geschrieben : | Nein, lässt es sich nicht. Nicht umsonst installiert der ProcessExplorer einen Treiber. |
Unter Windows 2000 ja, unter zumindest Vista und Windows 7 nein (es sei denn das geht auch ohne Adminrechte), bei XP bin ich nicht sicher.
Abgesehen davon habe ich das auch in einem unserer Projekte bereits umgesetzt. Das funktioniert auch aus einem normalen Programm heraus. Nur muss man viel mehr prüfen als Quelltexten wie dem von dir geposteten. Meiner dürfte an die 500 Zeilen haben insgesamt. Der Quelltext ist leider nicht Open Source, sonst würde ich ihn posten.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 23.09.11 17:56
Also unter XP funktioniert der Quellcode (oben) auf manchen Rechnern und auf manchen auch wieder nicht. Eventuell hast du mit deinem auch bisher nur Glück gehabt. Ich kann allerdings nur für XPO sprechen. Der Thread, in dem das mal diskutiert wurde, müsste noch hier im Forum zu finden sein.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 23.09.11 18:29
Luckie hat folgendes geschrieben : | Also unter XP funktioniert der Quellcode (oben) auf manchen Rechnern und auf manchen auch wieder nicht. |
Stimmt, man muss wie gesagt noch viel mehr prüfen und tricksen. Leider ist das alles undokumentiert...
|
|
pibesumse 
Hält's aus hier
Beiträge: 15
|
Verfasst: Fr 23.09.11 18:48
Vielen Dank für Ihre Erklärung und Hilfe,
|
|
pibesumse 
Hält's aus hier
Beiträge: 15
|
Verfasst: Fr 23.09.11 19:07
Lieber, Luckie, Du hast recht,
es wird nicht richtig dass ich die Datei löschen werde, wenn ein program wird genutz,
so ich will nur wissen welches Programm diese Datei verwendet.
" Wir nennen das im Deutschen, jemanden den Teppich unter den Füßen wegziehen."
Ich lernte einen neuen ausdruck. 
|
|
|