10

Все есть в названии, но более официально:

Почему Windows позволяет мне переименовывать работающий исполняемый файл, но не удаляет его?

3 ответа3

9

Там действительно нет такой вещи, как переименование файла. Файл может иметь более одного имени или не иметь имени, поэтому вы переименовываете не файл, а запись каталога. Переименование - это операция над записью каталога, на которую не влияет тот факт, что файл заблокирован для выполнения.

5

Он не позволяет удалять исполняемый файл и библиотеки 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
2

Я предполагаю, что это потому, что имя - это просто атрибут того же двоичного содержимого файла, поэтому, пока есть данные, дескриптор, удерживаемый запущенным процессом, не изменится.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .