2017-03-29 40 views
1

當我使用最新版本的McAfee Antivirus時,我注意到碎化功能可以刪除正在運行的文件,然後要求您重新啓動計算機。有誰知道它如何刪除正在運行的文件而不關閉它們?刪除正在運行的文件

+0

我將此標記爲脫離主題,因爲請求的是非現場資源。這個問題似乎也超出了StackOverflow的範圍。 – erip

+0

對不起。我是新來這個網站 – Mx2002

+0

我甚至不知道如何評論你的評論 – Mx2002

回答

0

它可能取決於操作系統和文件系統類型。在Linux和Unix上,刪除文件就是從文件夾中刪除一個條目。如果沒有文件夾條目指向該文件,該文件實際上會在最後關閉時被刪除。因此,即使在另一個進程中打開文件,也可以安全地刪除文件。

在Windows上,MSDN說:如果一個應用程序試圖刪除具有開放普通I/O或內存映射文件

其他句柄文件

的的DeleteFile函數失敗

通常的技巧包括:

  • 嘗試關閉該文件上具有句柄的所有進程。對於可執行文件,通常意味着終止其所有實例
  • 將文件標記爲在下次重新引導時刪除。正如你所說McAfee要求重新啓動計算機,它可能會使用該選項。 WINAPI函數MoveFileEx爲此提供了條款。從MSDN page提取物(強調雷)
BOOL WINAPI MoveFileEx(
    _In_  LPCTSTR lpExistingFileName, 
    _In_opt_ LPCTSTR lpNewFileName, 
    _In_  DWORD dwFlags 
); 

...
lpNewFileName [中,可選]
在本地計算機上的文件或目錄的新名稱。
...
如果dwFlags指定MOVEFILE_DELAY_UNTIL_REBOOT且lpNewFileName爲NULL,則MoveFileEx在系統重新啓動時註冊要刪除的lpExistingFileName文件