Tutto è nel titolo, ma più ufficialmente:
Perché Windows mi consente di rinominare un eseguibile in esecuzione, ma non di eliminarlo?
Tutto è nel titolo, ma più ufficialmente:
Perché Windows mi consente di rinominare un eseguibile in esecuzione, ma non di eliminarlo?
Risposte:
Non c'è davvero nulla come rinominare un file. Un file può avere più di un nome o nessun nome, quindi non è il file che stai rinominando ma la voce della directory. La ridenominazione è un'operazione sulla voce della directory, che non è influenzata dal fatto che il file è bloccato per l'esecuzione.
dwShareMode
su zero o usando i flag OF_SHARE_COMPAT
o OF_SHARE_EXCLUSIVE
.
Non consente di eliminare il file eseguibile e le DLL poiché Windows mappa le parti dei file eseguibili in memoria durante la creazione del processo, pertanto è necessario il file durante la durata del processo.
Sfortunatamente non ho una vera ragione per cui permetta ancora di rinominare tali file. Immagino che ciò avvenga per consentire l'aggiornamento dei file dlls ed exe mentre sono in esecuzione per ridurre al minimo i tempi di interruzione del servizio.
Il linux (unix in generale) al contrario consente di eliminare un file eseguibile mentre è in esecuzione:
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