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?
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 sinalizadoresOF_SHARE_COMPAT
ouOF_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:
fonte
Eu acho que é porque um nome é apenas um atributo do mesmo conteúdo binário do arquivo, portanto, enquanto os dados estiverem lá, o identificador, mantido pelo processo em execução, não será alterado.
fonte