Wszystko jest w tytule, ale bardziej oficjalnie:
Dlaczego system Windows pozwala mi zmienić nazwę działającego pliku wykonywalnego, ale nie mogę go usunąć?
Wszystko jest w tytule, ale bardziej oficjalnie:
Dlaczego system Windows pozwala mi zmienić nazwę działającego pliku wykonywalnego, ale nie mogę go usunąć?
Odpowiedzi:
Naprawdę nie ma czegoś takiego jak zmiana nazwy pliku. Plik może mieć więcej niż jedną nazwę lub może nie mieć żadnej nazwy, więc nie zmieniasz nazwy pliku, ale pozycję katalogu. Zmiana nazwy jest operacją na wpisie katalogu, na którą nie ma wpływu fakt, że plik jest zablokowany do wykonania.
dwShareMode
na zero lub użycie flag OF_SHARE_COMPAT
lub OF_SHARE_EXCLUSIVE
.
Nie pozwala na usunięcie pliku wykonywalnego i bibliotek DLL, ponieważ system Windows mapuje części plików wykonywalnych do pamięci w ramach procesu tworzenia, dlatego potrzebuje pliku przez cały czas jego trwania.
Niestety nie mam prawdziwego powodu, dla którego nadal pozwala zmieniać nazwy takich plików. Myślę, że jest to zrobione, aby umożliwić aktualizację plików dll i exe podczas ich działania, aby zminimalizować czas przerwy w działaniu usługi.
Natomiast linux (ogólnie unix) pozwala na usunięcie pliku wykonywalnego podczas jego działania:
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