Por que eu posso renomear um executável em execução, mas não excluí-lo?

10

Tudo está no título, mas mais oficialmente:

Por que o Windows me permite renomear um executável em execução, mas não excluí-lo?

    
por marco-fiset 15.10.2012 / 22:13

3 respostas

9

Realmente não existe nada como 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 de diretório. A renomeação é uma operação na entrada de diretório, que não é afetada pelo fato de o arquivo estar bloqueado para execução.

    
por 15.10.2012 / 22:23
5

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 razão verdadeira para permitir a renomeação desses arquivos. Eu acho que isso é feito para permitir a atualização dos arquivos dlls e exe enquanto eles estão sendo executados para minimizar o tempo de interrupção do serviço.

O linux (unix em geral) em contraste permite excluir um arquivo executável enquanto ele 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
    
por 15.10.2012 / 22:23
2

Eu acho que é porque um nome é apenas um atributo do mesmo conteúdo binário do arquivo, então, contanto que os dados estejam lá, o identificador, mantido pelo processo de execução, não será alterado.

    
por 15.10.2012 / 22:21