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

为何C#调用CMD执行rstrui.exe失败且应用崩溃?

解决C#调用rstrui.exe无法启动系统还原的问题

问题原因分析

你的代码存在两个核心问题:

  • 不必要的CMD中转:rstrui.exe是独立的GUI程序,无需通过cmd.exe调用,中转反而可能引入启动逻辑问题。
  • 阻塞的输出读取:rstrui.exe作为GUI程序不会向控制台输出任何内容,原代码中调用StandardOutput.ReadToEnd()会导致主线程无限等待,进而阻塞进程启动。

解决方案

方案1:直接启动rstrui.exe(推荐)

跳过cmd中转,直接启动系统还原程序,并配置正确的进程启动参数:

public static void LaunchSystemRestore()
{
    ProcessStartInfo startInfo = new ProcessStartInfo("rstrui.exe")
    {
        CreateNoWindow = false,
        UseShellExecute = true // GUI程序需启用此参数以保证正常启动
    };

    using (Process process = new Process())
    {
        process.StartInfo = startInfo;
        process.Start();
    }
}

调用方式:

LaunchSystemRestore();

方案2:确保程序拥有管理员权限

系统还原需要管理员权限才能运行,如果你的C#程序未以管理员身份启动,即使代码正确也无法触发系统还原。可以通过以下方式添加权限要求:

  1. 在项目中添加app.manifest文件(右键项目 → 添加 → 新建项 → 选择"应用程序清单文件")
  2. 修改清单中的requestedExecutionLevel节点:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

对原代码的问题说明

原代码中通过cmd /c rstrui.exe调用时,cmd启动rstrui.exe后会立即退出,但后续的ReadToEnd()会等待控制台输出(而rstrui.exe没有输出),导致线程阻塞,最终表现为rstrui.exe无法正常启动。直接启动目标程序可以彻底避免这类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:25:28