Tudo está no título, mas mais oficialmente:
Por que o Windows permite que eu renomeie um executável em execução, mas não o exclua?
Tudo está no título, mas mais oficialmente:
Por que o Windows permite que eu renomeie um executável em execução, mas não o exclua?
Respostas:
Realmente não existe o nome de renomear um arquivo. Um arquivo pode ter mais de um nome ou nenhum nome; portanto, não é o arquivo que você está renomeando, mas a entrada do diretório. Renomear é uma operação na entrada do diretório, que não é afetada pelo fato de o arquivo estar bloqueado para execução.
dwShareMode
como zero ou usando os sinalizadores OF_SHARE_COMPAT
ou OF_SHARE_EXCLUSIVE
.
Ele não permite excluir o arquivo executável e as DLLs porque o Windows mapeia partes dos arquivos executáveis na memória como parte da criação do processo; portanto, ele precisa do arquivo durante a vida útil do processo.
Infelizmente, não tenho uma verdadeira razão pela qual ele ainda permite renomear esses arquivos. Eu acho que isso é feito para permitir a atualização das DLLs e arquivos exe enquanto eles estão em execução para minimizar o tempo de interrupção do serviço.
O linux (unix em geral) em contraste permite excluir um arquivo executável enquanto está em execução:
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