在没有FILE_SHARE_DELETE的情况下重命名在另一个进程中打开的文件

使用Windows API,可以重命名另一个进程中没有FILE_SHARE_DELETE权限的文件吗?

我认为这是不可能的基于CreateFile文档说:

注意 :删除访问权限允许删除和重命名操作。

与此相一致的是,通过在最终用户命令提示符中进行常规rename ,我经常遇到The process cannot access the file because it is being used by another process. ; 通过最终用户GUI和通过python的os.rename重命名os.rename发生类似的错误。

然而, 这个高度回应的答案似乎恰恰相反:

如果任何其他进程打开文件而不删除共享,删除将失败,重命名从来不是一个问题。

这不仅仅是一个小点, 整个答案取决于这个陈述:它只解决OP问题,如果重命名不会失败,当删除。

我错过了什么?

注意:如果有问题,我指的是使用C ++ API的Windows 10(我认为它比C#API更强大)。

编辑:移动代码片段到一个新的问题 。

它只能用作延迟操作,使用MOVEFILE_DELAY_UNTIL_REBOOT标志。 这是一个特权操作,需要用户上下文来启用管理员令牌( UAC )。 这是安装程序在使用中如何替换文件,然后要求操作员重新引导系统。

正如你所看到的,不是微不足道的,你应该尽量避免这样做。