C++调用sfc /scannow失败:Windows资源保护无法启动修复服务
解决sfc.exe /scannow无法启动修复服务的问题
嘿,作为第一次提问的10年级同学,能自己尝试用C++调用系统命令已经超棒啦!你遇到的这个错误其实很常见,核心原因是sfc /scannow需要管理员权限才能运行,而你的程序默认是用普通用户权限启动的,所以没法访问系统级的修复服务。
下面给你两个简单的解决方案:
方法一:以管理员身份运行Code::Blocks
这是最直接的办法,步骤很简单:
- 找到你的Code::Blocks桌面图标(或者开始菜单里的快捷方式)
- 右键点击图标,选择**「以管理员身份运行」**
- 打开你的代码项目,重新编译并运行
这样你的程序就会继承Code::Blocks的管理员权限,运行时会弹出UAC(用户账户控制)提示框,点击「是」允许后,sfc命令就能正常执行了。
方法二:给程序添加管理员权限要求(进阶)
如果你希望每次运行程序都自动请求管理员权限,可以给你的C++程序添加一个manifest文件:
- 在Code::Blocks项目里新建一个文本文件,命名为
app.manifest - 把下面的内容复制进去:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>
- 在Code::Blocks的项目设置里,把这个manifest文件添加到编译选项中(具体路径:Project -> Build options -> Linker settings -> Other linker options,添加
-Wl,--manifest,app.manifest)
之后编译出来的程序,每次启动都会自动弹出UAC请求,获得管理员权限后就能正常运行sfc命令了。
为什么会出现这个错误?
Windows的UAC机制会限制普通权限的程序修改系统核心文件或访问系统服务,而sfc /scannow是用来扫描并修复系统文件的,必须要有管理员权限才能调用对应的修复服务,所以普通权限下就会提示无法启动服务。
内容的提问来源于stack exchange,提问作者lucki1000
相关产品推荐
相关产品推荐

