
如何在 Windows 中停用檔案鎖定,以便可以像在 Linux 系統中一樣覆蓋鎖定的檔案?
我正在開發一個插件,它是一個dll。在再次編譯它之前,我總是需要在加載它的程式中卸載它。如果我可以始終編譯它並稍後通過再次卸載/加載來重新加載它,那麼它會減少很多工作。對於 Linux,這沒有問題,編譯器只是覆蓋插件,下次開啟時將使用新版本。 Windows對其有寫入鎖,因此編譯器無法寫入它併中止。
答案1
您不能「僅僅」停用可執行檔/庫檔案的鎖定。
但是,您可以移動或重新命名正在使用的文件,因此讓您的建置過程將現有的 DLL 移動到其他地方並在其位置編譯新的 DLL。
他們很可能沒有為其添加隱藏開關,因為作業系統的各個部分都假設它將永遠開啟。例如,檔案系統程式碼可能期望始終至少有一個指向檔案的連結(因此在刪除最後一個連結後可以立即釋放空間) - 因此,如果您強制它刪除正在使用的文件,它可能會導致各種檔案系統損壞,例如兩個檔案使用相同的磁碟空間。
也就是說,舊事新事曾經寫道,在 WinNT 核心中允許 Linux 風格的檔案刪除實際上並不難,他們只是為了避免一些相容性問題而沒有這樣做。