Semuanya ada dalam judul, tetapi lebih resmi:
Mengapa Windows membiarkan saya mengganti nama yang dapat dijalankan yang dapat dijalankan, tetapi tidak menghapusnya?
Benar-benar tidak ada yang namanya mengganti nama file. File dapat memiliki lebih dari satu nama atau tanpa nama, jadi bukan file yang Anda ganti namanya tetapi entri direktori. Mengganti nama adalah operasi pada entri direktori, yang tidak terpengaruh oleh fakta bahwa file dikunci untuk dieksekusi.
dwShareMode
ke nol atau menggunakan tandaOF_SHARE_COMPAT
atauOF_SHARE_EXCLUSIVE
.Itu tidak memungkinkan untuk menghapus file yang dapat dieksekusi dan DLL karena Windows memetakan bagian dari file yang dapat dieksekusi ke dalam memori sebagai bagian dari proses penciptaan, sehingga diperlukan file selama masa proses.
Sayangnya saya tidak punya alasan mengapa masih memungkinkan untuk mengganti nama file tersebut. Saya kira ini dilakukan untuk mengaktifkan pembaruan file dll dan exe ketika mereka berjalan untuk meminimalkan waktu gangguan layanan.
Sebaliknya, linux (unix in general) memungkinkan untuk menghapus file yang dapat dieksekusi ketika sedang berjalan:
sumber
Saya kira itu karena nama hanyalah atribut dari konten biner file yang sama, jadi selama datanya ada, pegangannya, dipegang oleh proses yang berjalan karena itu tidak akan berubah.
sumber