1
当我使用最新版本的McAfee Antivirus时,我注意到碎化功能可以删除正在运行的文件,然后要求您重新启动计算机。有谁知道它如何删除正在运行的文件而不关闭它们?删除正在运行的文件
当我使用最新版本的McAfee Antivirus时,我注意到碎化功能可以删除正在运行的文件,然后要求您重新启动计算机。有谁知道它如何删除正在运行的文件而不关闭它们?删除正在运行的文件
它可能取决于操作系统和文件系统类型。在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文件。
我将此标记为脱离主题,因为请求的是非现场资源。这个问题似乎也超出了StackOverflow的范围。 – erip
对不起。我是新来这个网站 – Mx2002
我甚至不知道如何评论你的评论 – Mx2002