就我而言,我想使用注册表值在SYSTEM\CurrentControlSet\Control\Session Manager!PendingFileRenameOperations
重新启动时删除文件。我正在使用 PowerShell。
使用类似或任何其他命令行二进制文件将数据添加到注册表会相对容易MoveFile
,但我认为在本地方法可用时使用第三方工具(甚至是 Sysinternals)是一种糟糕的形式。
只有当其中的条目(它是一个 Multistring 对象)以两个 NUL 字符为后缀时,问题
PendingFileRenameOperations
才会执行任何操作,在 Regedit 的二进制查看器中显示为.. ..
. 通常通过 PowerShell 添加信息不起作用,并且添加二进制数据虽然可能,但由于 PowerShell(当然是 PowerShell 2.0)缺乏提取注册表多字符串对象的二进制数据的能力,会清除值中的任何现有数据。
问题
是否可以在 PS2.0 机器上使用本机方法来添加条目以PendingFileRenameOperations
使操作系统实际承认它们?
是的。使用以下 PowerShell 代码:
我们在这里做什么:
set-itemproperty
无论出于何种原因使用都不起作用)\??\C:\File.exe
,在这种情况下是\??\
+ 要删除的文件的文件路径`0`0
在 PowerShell 中)这将确保文件在下次重新启动时被删除。
您可以使用 Powershell 中的 .NET,例如:
此外,我相信 PendingFileRenameOperations2 也是 Windows 会话管理器在启动时处理的注册表值。我怀疑您可以将其用于您的目的,而无需触摸 PendingFileRenameOperations。可能值得一试。