使用Windows API,是否可以重命名在没有FILE_SHARE_DELETE
权限的情况下在另一个进程中打开的文件?
我认为基于CreateFile
docs说:
注意:删除访问权限允许删除和重命名操作。
与此一致,在最终用户命令提示符下通过常规rename
重命名,我经常遇到The process cannot access the file because it is being used by another process.
;通过最终用户GUI和python的os.rename
进行重命名时会发生类似的错误。
但是,this高度支持的答案似乎恰恰相反:
如果任何其他进程在没有删除共享的情况下打开文件,则删除将失败,重命名绝不是问题。
这不仅仅是一个小问题;整个答案取决于该陈述:如果重命名在删除时不会失败,它只解决OP问题。
我错过了什么?
注意:如果重要,我指的是Windows 10,使用C ++ API(我认为它比C#API更强大)。
修改:将代码段移至new question。
答案 0 :(得分:1)
只能使用MOVEFILE_DELAY_UNTIL_REBOOT
标志作为延迟操作。这是一种特权操作,需要用户上下文启用管理员令牌(UAC)。这是安装程序在使用时替换文件的方式,然后他们要求操作员重新启动系统。
正如您所看到的,这并非易事,您应该尽量避免这样做。