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 MoveFile hinterlässt Zombie (https://www.delphipraxis.net/195205-movefile-hinterlaesst-zombie.html)

Graf Gustav 12. Feb 2018 09:05

MoveFile hinterlässt Zombie
 
Hallo,
ich bin auf einen neuen Rechner umgezogen (alles neu aufgesetzt, gleiches Win10 Pro wie auf dem vorherigen) und habe seitdem einige spukhafte Effekte.
Einer davon ist, dass MoveFile einer bmp-Datei (erzeugt mit SaveToFile einer TImage) einen Zombie hinterlässt:
eine Datei, die sich nicht löschen lässt und mir als Admin die Information über Besitzer und Zugriffsrechte verweigert.
Nach System-Restart ist sie weg.
Den MoveFile erledigt eine interne Funktion, die noch für eine ganze Reihe von Dateien (pdf, txt) aufgerufen wird, was problemlos funktioniert (Auch die Ziel-bmp-Datei wird erzeugt).
Eine Zeit lang hat dieser etwas brachiale Workaround mit dem DeleteFile geholfen, aber jetzt hat es mich eingeholt, der Zombie triumphiert.

Delphi-Quellcode:
function File_Move(const cmd: string): boolean;
  begin
    Result := MoveFile(PChar(src), PChar(dst));
    if not Result then begin
      s := SysErrorMessage(GetLastError);
      MessageDlg(Format(_MSG_ERR, [cmd, src, dst, s]), mtError, [mbOK], 0);
    end else DeleteFile(src);  //  ggf. Zombie töten
  end;
end;
Die Datei wird erzeugt mit:
Delphi-Quellcode:
img.Picture.SaveToFile(fn);
Es muss am System liegen, denn auf dem bisherigen System funktioniert diese Anwendung rückstandsfrei.
(Ein anderer Spuk ist übrigens, dass ich bei W32-Aufrufen das Ergebnis im falschen Zeichensatz zurückbekomme, da mache ich aber einen gesonderten Thread auf,
weil mir das, was ich dazu bisher gefunden habe, nicht geholfen hat.)
Hat jemand eine Idee?

Der schöne Günther 12. Feb 2018 09:12

AW: MoveFile hinterlässt Zombie
 
Bekommst du ein Minimalbeispiel hin welches das nachstellt?

An MoveFile(..) an sich ist ja nichts böses. Das von dir beschriebene Verhalten kenne ich nur wenn man das Flag
Delphi-Quellcode:
MOVEFILE_DELAY_UNTIL_REBOOT
bei MoveFileEx(..) angibt.

PS: Welche Delphi-Version ist es? Ist sie evtl. so alt dass sie z.B. noch von der Schwachstelle in der BMP-Verarbeitung betroffen ist und ein Virenscanner hält da evtl. noch länger seinen Finger drauf weil ihm das fischig erscheint?
https://vuldb.com/de/?id.67392
https://vuldb.com/de/?id.67559

=> http://support.embarcadero.com/article/44015

Graf Gustav 12. Feb 2018 22:16

AW: MoveFile hinterlässt Zombie
 
Danke für die schnellen Tipps (das Flag ist interessant...:).
Eine Minianwendung hatte ich erstellt, ohne den Effekt erzeugen zu können.
Ich hatte sie jetzt etwas weiter getrieben, und plötzlich hatte ich Zombies,
dann habe ich sie noch weiter getrieben und die Zombies waren wieder weg.
Ich werde das morgen hoffentlich verlässlich reproduzieren können.
Die Delphi Version ist 10.1 Berlin.

Namenloser 13. Feb 2018 06:46

AW: MoveFile hinterlässt Zombie
 
Kann es sein, dass irgendein Programm die Datei noch geöffnet hat?

Codehunter 13. Feb 2018 06:47

AW: MoveFile hinterlässt Zombie
 
Hatte ich auch mal. Da hat bei mir ein Virenscanner dazwischen gefunkt.

Graf Gustav 16. Feb 2018 15:13

AW: MoveFile hinterlässt Zombie
 
So, das Problem ist gefixt.
Es hat zwar nicht unmittelbar etwas mit Delphi-W32-Programmierung zu tun,
aber die Lösung ist vielleicht von Interesse, weil es jeden treffen kann.

Der Zombie-Effekt kann auftreten, wenn Bild-Dateien (bei mir bmp und jpg) verschoben
(gelöscht) werden, die auf einem lokalen Laufwerk liegen (SSD und HDD).

Nachdem nämlich nicht nur meine Anwendung, sondern auch XnView und sogar der Explorer
solche Zombies erzeugt haben, war zu vermuten, dass ein dritter Prozess diesen Effekt hervorruft.
Bei mir war es "Reason Core Security Complete Protection", von dem eine Testversion in meiner
Konfiguration gelandet war, mit welchem Mutterschiff auch immer.
Diese ungebetenen Risiko-Vermeider sind manchmal schlimmer als das potenzielle Risiko.:evil:

Danke nochmal für Eure Mithilfe.

himitsu 16. Feb 2018 15:49

AW: MoveFile hinterlässt Zombie
 
Ich hoffe bei dessen Installation war nicht zufällig "ein Haken falsch gesetzt". :stupid:
Zitat: http://www.chip.de/downloads/Reason-..._78398112.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:05 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