Wszystko jest w tytule, ale bardziej oficjalnie:
Dlaczego system Windows pozwala mi zmienić nazwę działającego pliku wykonywalnego, ale nie mogę go usunąć?
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 flagOF_SHARE_COMPAT
lubOF_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:
źródło
Myślę, że dzieje się tak, ponieważ nazwa jest tylko atrybutem tej samej binarnej zawartości pliku, więc dopóki dane tam są, uchwyt trzymany przez uruchomiony proces nie zmieni się.
źródło