Todo está en el título, pero más oficialmente:
¿Por qué Windows me permite cambiar el nombre de un ejecutable en ejecución, pero no eliminarlo?
Todo está en el título, pero más oficialmente:
¿Por qué Windows me permite cambiar el nombre de un ejecutable en ejecución, pero no eliminarlo?
Respuestas:
Realmente no existe el cambio de nombre de un archivo. Un archivo puede tener más de un nombre o ningún nombre, por lo que no es el archivo que está renombrando sino la entrada del directorio. El cambio de nombre es una operación en la entrada del directorio, que no se ve afectada por el hecho de que el archivo está bloqueado para su ejecución.
dwShareMode
en cero o use las banderas OF_SHARE_COMPAT
o OF_SHARE_EXCLUSIVE
.
No permite eliminar el archivo ejecutable y las DLL porque Windows asigna partes de los archivos ejecutables en la memoria como parte de la creación del proceso, por lo que necesita el archivo durante la vida útil del proceso.
Desafortunadamente, no tengo una verdadera razón por la que todavía permita cambiar el nombre de dichos archivos. Supongo que esto se hace para permitir la actualización de los archivos dlls y exe mientras se ejecutan para minimizar el tiempo de interrupción del servicio.
El linux (unix en general) en contraste permite eliminar un archivo ejecutable mientras se está ejecutando:
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