【问题标题】:Issue with C# CMD outputC# CMD 输出问题
【发布时间】:2021-08-27 15:53:58
【问题描述】:

我正在创建一个将 Windows Server 版本从标准评估版更改为标准版的 C# 应用程序。我正在尝试获取 CMD 命令的输出,但是当 DISM 命令完成时,它会询问您是否要重新启动计算机并且您需要输入“y”或“n”。我尝试通过在命令之前传递“echo n |”并使用 process.StandardInput.Write 来做到这一点,但这些都不起作用。该功能与其他不需要用户输入的命令完美配合。你知道我在做什么错吗?谢谢

 public static string get_cmd_output(string cmd)
    {
        System.Diagnostics.Process process = new System.Diagnostics.Process();
        process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        process.StartInfo.FileName = "cmd.exe";
        process.StartInfo.Arguments = "/C echo n |  " + cmd;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.RedirectStandardOutput = true;
        process.Start();
        

        string q = "";
        while (!process.HasExited)
            q += process.StandardOutput.ReadToEnd();
        return q;
    }

get_cmd_output("DISM /Online /Set-Edition:ServerStandard /ProductKey:" + key + " /AcceptEula");

【问题讨论】:

  • 您是否尝试过将/NoRestart 作为参数之一传递?
  • 尝试在“Y\n”或“N\n”之后添加回车

标签: c# cmd process activation


【解决方案1】:

docs for DISM中,可以传递的全局参数之一是/NoRestart

/NoRestart

禁止重新启动。如果不需要重新启动,则此命令执行 没有。此选项将阻止应用程序提示输入 重启(或者如果 /Quiet 选项阻止它自动重启 使用)。

所以如果你这样做,它应该可以工作:

get_cmd_output("DISM /Online /Set-Edition:ServerStandard /ProductKey:" + key + " /AcceptEula /NoRestart");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多