You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++调用sfc /scannow失败:Windows资源保护无法启动修复服务

解决sfc.exe /scannow无法启动修复服务的问题

嘿,作为第一次提问的10年级同学,能自己尝试用C++调用系统命令已经超棒啦!你遇到的这个错误其实很常见,核心原因是sfc /scannow需要管理员权限才能运行,而你的程序默认是用普通用户权限启动的,所以没法访问系统级的修复服务。

下面给你两个简单的解决方案:

方法一:以管理员身份运行Code::Blocks

这是最直接的办法,步骤很简单:

  • 找到你的Code::Blocks桌面图标(或者开始菜单里的快捷方式)
  • 右键点击图标,选择**「以管理员身份运行」**
  • 打开你的代码项目,重新编译并运行

这样你的程序就会继承Code::Blocks的管理员权限,运行时会弹出UAC(用户账户控制)提示框,点击「是」允许后,sfc命令就能正常执行了。

方法二:给程序添加管理员权限要求(进阶)

如果你希望每次运行程序都自动请求管理员权限,可以给你的C++程序添加一个manifest文件:

  1. 在Code::Blocks项目里新建一个文本文件,命名为app.manifest
  2. 把下面的内容复制进去:
<?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>
  1. 在Code::Blocks的项目设置里,把这个manifest文件添加到编译选项中(具体路径:Project -> Build options -> Linker settings -> Other linker options,添加-Wl,--manifest,app.manifest)

之后编译出来的程序,每次启动都会自动弹出UAC请求,获得管理员权限后就能正常运行sfc命令了。

为什么会出现这个错误?

Windows的UAC机制会限制普通权限的程序修改系统核心文件或访问系统服务,而sfc /scannow是用来扫描并修复系统文件的,必须要有管理员权限才能调用对应的修复服务,所以普通权限下就会提示无法启动服务。

内容的提问来源于stack exchange,提问作者lucki1000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:11:37