filesystem:error 无法删除:Input/output 错误
filesystem:error cannot remove: Input/output error
我正在尝试使用这种方式删除字体文件,
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 是怎么做到的?
我的应用需要达到相同的水平。
发生错误是因为我没有删除文件的权限,在某些情况下是因为文件已被另一个进程打开。
为了解决权限问题,我不得不从命令 promot 中调用以下命令,
takeown /f C:\Windows\Fonts /r /d y
icacls C:\Windows\Fonts /grant administrators:F /t
为了解决文件由另一个进程拥有时的问题,我发现了一个名为 IOBitUnlocker 的应用程序,它能够在不关闭进程的情况下执行此操作,因此我决定深入研究它。
我对 IOBitUnlocker 进行了逆向工程。他们正在使用内核模式驱动程序并使用 KeStackAttachProcess
附加到拥有该文件的进程并解锁它。
我很幸运地找到了一篇完整代码的文章,描述了如何使用这个 API 来解锁文件。
https://www.programmersought.com/article/96107379969/
此方法优越,因为您不必关闭应用程序或重新启动计算机。另外,您必须签署内核模式驱动程序或直接从 BIOS 禁用驱动程序验证。
我正在尝试使用这种方式删除字体文件,
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 是怎么做到的?
我的应用需要达到相同的水平。
发生错误是因为我没有删除文件的权限,在某些情况下是因为文件已被另一个进程打开。
为了解决权限问题,我不得不从命令 promot 中调用以下命令,
takeown /f C:\Windows\Fonts /r /d y
icacls C:\Windows\Fonts /grant administrators:F /t
为了解决文件由另一个进程拥有时的问题,我发现了一个名为 IOBitUnlocker 的应用程序,它能够在不关闭进程的情况下执行此操作,因此我决定深入研究它。
我对 IOBitUnlocker 进行了逆向工程。他们正在使用内核模式驱动程序并使用 KeStackAttachProcess
附加到拥有该文件的进程并解锁它。
我很幸运地找到了一篇完整代码的文章,描述了如何使用这个 API 来解锁文件。
https://www.programmersought.com/article/96107379969/
此方法优越,因为您不必关闭应用程序或重新启动计算机。另外,您必须签署内核模式驱动程序或直接从 BIOS 禁用驱动程序验证。