【发布时间】:2021-07-02 22:15:53
【问题描述】:
我正在尝试使用这种方式删除字体文件,
std::filesystem::remove(std::filesystem::path("C:\\Windows\\Fonts\\segmdl2.ttf"));
但这会失败并抛出异常,
filesystem:error cannot remove: Input/output error
例外没有帮助。删除此类文件的正确方法是什么?
更新,
我试图从 Powershell 中删除它,但它会引发以下错误,
del C:\Windows\Fonts\segmdl2.ttf
del : Cannot remove item C:\Windows\Fonts\segmdl2.ttf: Access to the path 'C:\Windows\Fonts\segmdl2.ttf' is denied.
At line:1 char:1
+ del C:\Windows\Fonts\segmdl2.ttf
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:\Windows\Fonts\segmdl2.ttf:FileInfo) [Remove-Item], UnauthorizedAcc
essException
+ FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand
我什至尝试直接从字体文件夹中删除它,但我收到一个错误,因为另一个应用程序已经在使用该字体,所以无法完成。
但我成功地从命令提示符中删除了它。
cmd 是如何做到这一点的?
我的应用需要达到相同的水平。
【问题讨论】:
-
我相信UAC会阻止你在没有提升的情况下删除windows系统文件。
-
即使是管理员也需要提升。
-
@drescherjm 我认为这完全是一个骗局
-
您可以使用
DeleteFileAPI 并使用GetLastError并得到实际错误吗?我几乎可以肯定它将是 ERROR_ACCESS_DENIED 但我们需要确定。您肯定需要提升权限,甚至可能需要令牌权限调整。最后,作为一个闲散的好奇心,如果可能的话,你能告诉你为什么要从 Windows 文件夹中删除一些东西吗?