2017-03-29 36 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文件