Alles ist im Titel, aber offizieller:
Warum kann ich unter Windows eine laufende ausführbare Datei umbenennen, aber nicht löschen?
Alles ist im Titel, aber offizieller:
Warum kann ich unter Windows eine laufende ausführbare Datei umbenennen, aber nicht löschen?
Antworten:
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 Flags OF_SHARE_COMPAT
oder verwenden OF_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:
tmp]$ cp /usr/bin/md5sum .;ll md5*; \
(./md5sum /home/pub/iso/FC5/FC-5-i386-DVD.iso & ); \
rm md5sum ; ll md5*;ps -f
-rwxr-xr-x 1 sergey sergey 37276 Oct 16 02:38 md5sum
ls: cannot access md5*: No such file or directory
UID PID PPID C STIME TTY TIME CMD
sergey 2423 2422 0 02:32 pts/1 00:00:00 -bash
sergey 2533 1 0 02:38 pts/1 00:00:00 ./md5sum /home/pub/iso/FC5/FC-5-
sergey 2536 2423 0 02:38 pts/1 00:00:00 ps -f