【问题标题】:Run Command Prompt Commands can't run commands inside " "运行命令提示符命令不能在“”中运行命令
【发布时间】:2019-05-28 01:30:18
【问题描述】:

我正在尝试使用此 c# 代码运行 windows 命令:

Process cmd = new Process();
        cmd.StartInfo.FileName = "cmd.exe";
        cmd.StartInfo.RedirectStandardInput = true;
        cmd.StartInfo.RedirectStandardOutput = true;
        cmd.StartInfo.CreateNoWindow = false;
        cmd.StartInfo.UseShellExecute = false;
        cmd.Start();

        cmd.StandardInput.WriteLine("/C @shift /0");
        cmd.StandardInput.WriteLine("/C @echo off");
        cmd.StandardInput.WriteLine("/C color 04");
        cmd.StandardInput.WriteLine("/C title Loop Anti-Ban (Ignore Errors) (RGB)");
        cmd.StandardInput.WriteLine("/C :a");
        cmd.StandardInput.WriteLine("/C reg delete "HKEY_CURRENT_USER\Software\Epic Games\Unreal Engine\Identifiers" /f");
        cmd.StandardInput.Flush();
        cmd.StandardInput.Close();
        cmd.WaitForExit();
        Console.WriteLine(cmd.StandardOutput.ReadToEnd());

但它不允许我运行cmd.StandardInput.WriteLine("/C reg delete "HKEY_CURRENT_USER\Software\Epic Games\Unreal Engine\Identifiers" /f");

不知道为什么...(另一张图片要清楚)

【问题讨论】:

  • 提示:\ 是一个转义字符。所以 \t 被解释为制表符,\r 被解释为回车,\n 被解释为换行,\\ 被解释为文字 \,等等。

标签: c# windows command regedit


【解决方案1】:

您需要像这样在您的字符串中转义" \" 和路径中的\ 也应该以这种方式转义\\

cmd.StandardInput.WriteLine("/C reg delete \"HKEY_CURRENT_USER\\Software\\Epic Games\\Unreal Engine\\Identifiers\\" /f");

【讨论】:

  • 你试过了吗?那些用作分隔符的反斜杠也需要转义。 (比如“...USER\Soft...”应该是“...USER\\Soft...”)
  • @Flydog57 你是对的,谢谢你的评论。
  • 一个更深层次的问题是我们不能将“/C”命令行选项写入单个cmd.exe进程的标准输入。编写不带“/C”且以"\r\n" (CRLF) 结尾的命令。设置一个唯一的prompt。编写命令后,使用内部循环从 stdout 读取行,直到读取提示。否则,stdin 或 stdout 管道可能会填满并阻塞子进程(即内部命令的 cmd.exe,或 reg.exe 等孙子进程)。
猜你喜欢
  • 2010-11-30
  • 2020-03-21
  • 2013-08-01
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多