Все есть в названии, но более официально:
Почему Windows позволяет мне переименовывать работающий исполняемый файл, но не удаляет его?
Все есть в названии, но более официально:
Почему Windows позволяет мне переименовывать работающий исполняемый файл, но не удаляет его?
Ответы:
Там действительно нет такой вещи, как переименование файла. Файл может иметь более одного имени или не иметь имени, поэтому вы переименовываете не файл, а запись каталога. Переименование - это операция над записью каталога, на которую не влияет тот факт, что файл заблокирован для выполнения.
dwShareMode
на ноль или использование флагов OF_SHARE_COMPAT
или OF_SHARE_EXCLUSIVE
.
Он не позволяет удалить исполняемый файл и библиотеки DLL, потому что Windows отображает части исполняемых файлов в память как часть процесса создания, поэтому файл нужен в течение всего времени существования процесса.
К сожалению, у меня нет истинной причины, почему он все еще позволяет переименовывать такие файлы. Я предполагаю, что это сделано для того, чтобы разрешить обновление dll и exe-файлов во время их работы, чтобы минимизировать время прерывания обслуживания.
В отличие от Linux (Unix в целом) позволяет удалить исполняемый файл во время его работы:
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