删除正在运行的文件

时间:2017-03-29 12:24:40

标签: delete-file antivirus mcafee

当我使用最新版本的McAfee Antivirus时,我注意到Shred功能可以删除正在运行的文件,然后要求您重新启动计算机。有谁知道如何删除正在运行的文件而不关闭它们?

1 个答案:

答案 0 :(得分:0)

可能取决于操作系统和文件系统类型。在Linux和Unix之类的,删除文件只是从文件夹中删除一个条目。如果没有文件夹条目指向该文件,则该文件实际上在上次关闭时被删除。因此,即使在另一个进程中打开文件,您也可以安全地删除该文件。

在Windows上,MSDN说:

  

如果应用程序尝试删除具有为正常I / O打开的其他句柄的文件或作为内存映射文件,则DeleteFile函数将失败

常用技巧包括:

  • 尝试关闭该文件上具有句柄的所有进程。对于可执行文件,它通常意味着终止其所有实例
  • 在下次重新启动时将文件标记为删除。正如您所说McAfee要求重新启动计算机,它可能会使用该选项。 MoveFileEx WINAPI函数为此提供了条件。来自MSDN page(强调我的)
  • 的摘录
BOOL WINAPI MoveFileEx(
  _In_     LPCTSTR lpExistingFileName,
  _In_opt_ LPCTSTR lpNewFileName,
  _In_     DWORD   dwFlags
);
     

...

lpNewFileName [in,optional]
      本地计算机上文件或目录的新名称。
...
      如果dwFlags指定MOVEFILE_DELAY_UNTIL_REBOOT且lpNewFileName为NULL,则MoveFileEx会在系统重新启动时注册要删除的lpExistingFileName文件