Все в назві, але офіційно:
Чому Windows дозволяє мені перейменувати запущений виконуваний файл, але не видалити його?
Все в назві, але офіційно:
Чому Windows дозволяє мені перейменувати запущений виконуваний файл, але не видалити його?
Відповіді:
Дійсно не існує такого поняття, як перейменування файлу. У файлі може бути більше одного імені або без імені, тому перейменування ви не перейменований, а запис у каталозі. Перейменування - це операція над записом каталогу, на яку не впливає той факт, що файл заблокований для виконання.
dwShareMode
нуля або використання прапорів OF_SHARE_COMPAT
або OF_SHARE_EXCLUSIVE
.
Це не дозволяє видалити виконуваний файл та DLL, оскільки Windows відображає частини виконуваних файлів у пам'ять як частину створення процесу, тому він потребує цього файлу впродовж життя.
На жаль, у мене немає справжньої причини, чому вона все ще дозволяє перейменувати такі файли. Я думаю, що це робиться для того, щоб дозволити оновлення файлів dlls та 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