Alles ist im Titel, aber offizieller:
Warum kann ich unter Windows eine laufende ausführbare Datei umbenennen, aber nicht löschen?
Es gibt wirklich kein Umbenennen einer Datei. Eine Datei kann mehr als einen Namen oder keinen Namen haben. Es handelt sich also nicht um die Datei, die Sie umbenennen, sondern um den Verzeichniseintrag. Das Umbenennen ist eine Operation für den Verzeichniseintrag, die nicht davon betroffen ist, dass die Datei für die Ausführung gesperrt ist.
dwShareMode
auf Null setzen oder die FlagsOF_SHARE_COMPAT
oder verwendenOF_SHARE_EXCLUSIVE
.Das Ausführen der ausführbaren Datei und der DLLs ist nicht möglich, da Windows Teile der ausführbaren Dateien im Rahmen der Prozesserstellung dem Speicher zuordnet und die Datei daher während der Lebensdauer des Prozesses benötigt.
Leider habe ich keinen wahren Grund, warum es immer noch erlaubt ist, solche Dateien umzubenennen. Ich vermute, dass dies getan wird, um die Aktualisierung der DLLs und Exe-Dateien zu ermöglichen, während sie ausgeführt werden, um die Dienstunterbrechungszeit zu minimieren.
Im Gegensatz dazu ermöglicht Linux (Unix im Allgemeinen) das Löschen einer ausführbaren Datei, während sie ausgeführt wird:
quelle
Ich denke, das liegt daran, dass ein Name nur ein Attribut des gleichen binären Inhalts der Datei ist. Solange die Daten vorhanden sind, ändert sich das Handle, das vom laufenden Prozess dafür gehalten wird, nicht.
quelle