目前我可以在重启时删除目录。我目前正在使用MoveFileEx
函数并传递MOVEFILE_DELAY_UNTIL_REBOOT
常量。
我的问题是,如果我有以下内容:
目录1和内部我有目录2 ...目录2未被阻止,这意味着需要删除该目录,但因为目录1中只有一个目录,这意味着我可以删除目录1,这将依次删除目录2.但是,在我将目录1标记为在重新启动时删除后,我们可以说另一个目录已经安装到目录1中,名为目录3.在这种情况下,只有目录2应该被删除,因为我们不会删除目录3。
我想知道是否有任何条件变量/常量可以帮助解决这种情况?
答案 0 :(得分:0)
答案是,如果目录或文件未标记为要删除,则不会删除其所在的目录。 (正如IInspectable指出的那样)
"系统删除标记为删除的目录 MOVEFILE_DELAY_UNTIL_REBOOT仅在标志为空时标记。"
答案 1 :(得分:0)
但是让我们说在标记了目录1以便在重新启动时删除另一个目录已经安装到名为目录3的目录1中。在这种情况下,只应删除目录2,因为我们不会删除目录3。
没有API可以“取消标记”在重新启动时标记为删除的文件/目录。您必须直接更新注册表以从列表中删除项目。 MoveFileEx()
documentation告诉您使用了哪个注册表项:
该函数在以下注册表值中存储要在重新启动时重命名的文件的位置:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ PendingFileRenameOperations
此注册表值的类型为REG_MULTI_SZ。每个重命名操作都存储以下以NULL结尾的字符串之一,具体取决于重命名是否为删除:
szDstFile \ 0 \ 0
szSrcFile \ 0szDstFile \ 0
字符串 szDstFile \ 0 \ 0 表示在重新启动时要删除文件 szDstFile 。字符串 szSrcFile \ 0szDstFile \ 0 表示 szSrcFile 将在重新启动时重命名为 szDstFile 。
另一方面,文档也说:
只有在MOVEFILE_DELAY_UNTIL_REBOOT标志为空时,系统才会删除标记为删除的目录。要确保删除目录,请在尝试删除目录之前移动或删除目录中的所有文件。文件可能在引导时位于目录中,但在系统删除目录之前必须删除或移动它们。
但是只提到文件,而不是子目录。