Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi blockierte Datei (https://www.delphipraxis.net/136141-blockierte-datei.html)

paperboy 24. Jun 2009 08:53


blockierte Datei
 
hallo zusammen..

hoffe das passt hier in diesem forumteil...
ich habe eine blockierte datei die ich freigeben möchte um sie löschen zu können...
so wie das programm "Unlocker" dies z.b. tun kann...
habe nun gelesen das man, möchte man herrausfinden welche dateien die zu löschende datei blockieren,
auf treiberebene arbeiten muss...

wie sieht es aber aus wenn ich den Prozess (ist nur einer) bereits kenne der die datei blockiert? gibt es eine
möglichkeit diese dann freizubekommen ohne sich selbst einen treiber basteln zu müssen?
hängt mit folgendem problem zusammen:
http://www.delphipraxis.net/internal...052331#1052331

lg paperboy

himitsu 24. Jun 2009 09:01

Re: blockierte Datei
 
Das Problem ist, daß du auch noch rausbekommen mußt, welches Handle in der Anwendung zu der Datei gehört und dann mußt du wohl auch noch den Prozess rein und das Handle schließen. OK du bist ja schon drin. :)

Fridolin Walther 24. Jun 2009 10:49

Re: blockierte Datei
 
Eine Handle Liste zu holen ist trivial. Das Problem ist diese Handles zu Namen aufzulösen. Einige File Handles (vorzugsweise die von Pipes) sorgen dabei nämlich dafür, daß der Thread der die Namensauflösung macht, blockiert. Wenn Du Dir eine Lösung dafür mal ansehen willst, kannst Du hier mal schauen: http://www.delphipraxis.net/internal...=964475#964475 . Ich würde Dir empfehlen den Code allerdings nicht in Produktivcode einzusetzen.

Zitat:

Zitat von himitsu
und dann mußt du wohl auch noch den Prozess rein und das Handle schließen.

Selbst wenn er nicht im Prozess wär, wäre diese Aussage falsch. Ich hab eh nie verstanden, wieso Leute einen CloseHandle Call in Prozesse injezieren. Windows hat einen dokumentierten Mechanismus um Handles in fremden Prozessen zu schließen: MSDN-Library durchsuchenDuplicateHandle.

paperboy 24. Jun 2009 13:22

Re: blockierte Datei
 
danke 0xF30FC7.. werd das gleich mal versuchen...
hatte das problem nun gelöst indem ich den blockierenden prozess einfach abgeschossen und neu gestartet hab...
fand die lösung aber nicht sehr elegant :wink:

lg paperboy

Luckie 24. Jun 2009 13:34

Re: blockierte Datei
 
Ist aber wahrscheinlich besser, als dem Prozess den Teppich unter den Füßen wegzuziehen. Der Prozess wird die Datei nicht umsonst anlegen.

paperboy 24. Jun 2009 14:55

Re: blockierte Datei
 
hey luckie,

es geht um eine datei die ich in einem thread über TDownloadUrl lade... dieser lässt sich jedochnicht so einfach beenden
und wenn ich den thread per TerminateThread kille ist die datei immer noch blockiert :wink:
ich verstehe nicht wieso es in der OnDwonloadProgress prozedur keine möglichkeit gibt den download zu stoppen :roll:

lg paperboy

Luckie 24. Jun 2009 15:11

Re: blockierte Datei
 
Die Komponente oder Klasse TDownloadUrl kenne ich nicht. Sollte diese Klasse die API-Funktion MSDN-Library durchsuchenUrlDownloadToFile kapseln, dann kann man sehr wohl den Download abbrechen:
Zitat:

Zitat von Windows SDK
IBindStatusCallback::OnProgress allows a caller to implement a user interface or other progress monitoring functionality. It also allows the download operation to be canceled by returning E_ABORT from the IBindStatusCallback::OnProgress call.


messie 24. Jun 2009 15:47

Re: blockierte Datei
 
Ja, aber wenn er den Thread schon abschießen muss, kommt er wahrscheinlich nicht mehr dazu, die Callbackroutine zu füttern.

Grüße, Messie

paperboy 24. Jun 2009 16:25

Re: blockierte Datei
 
uhhh... ich dussel... es gibt für die OnDownloadProgress prozedur die boolean abbruchbedingung Chancel...
ich weis ehrlich nicht wie ich das übersehen konnte :wall: bitte vielmals um entschuldigung für die ganze mühe
die meine schusseligkeit hier verursacht hat.. ist mir wirklich sehr sehr peinlich :(

lg paperboy


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 Uhr.

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