【问题标题】:Opening command prompt window from C# [duplicate]从 C# 打开命令提示符窗口 [重复]
【发布时间】:2019-08-11 00:34:00
【问题描述】:

我想从 C# 代码打开 Windows 命令提示符,并希望从中执行包含少量命令的批处理文件。我在试用的基础上尝试了简单的“echo”和“dir”命令,但它不起作用。我既没有收到错误,也没有收到预期的输出。至少 cmd 窗口应该打开然后可以传递参数。

我尝试了两个选项 - 运行 cmd.exe 和运行批处理文件。我无法找到我在代码中犯的错误。在此先感谢您的帮助。

    var baseDirectory = "~/App_Data/TestRoot";
    ProcessStartInfo processStartInfo = new ProcessStartInfo();
    processStartInfo.UseShellExecute = false;
    processStartInfo.WorkingDirectory = HttpContext.Current.Server.MapPath(baseDirectory);
    processStartInfo.CreateNoWindow = false;
    processStartInfo.WindowStyle = ProcessWindowStyle.Maximized;

    //running cmd.exe then .bat as argument
    processStartInfo.FileName = HttpContext.Current.Server.MapPath(baseDirectory + "/cmd.exe");
    processStartInfo.Arguments = HttpContext.Current.Server.MapPath(baseDirectory + "/test.bat");

    Process process = Process.Start(processStartInfo);

我更改了 FileName 并删除了第二个选项的 Arguments 属性,请参考下面的代码。

processStartInfo.FileName = HttpContext.Current.Server.MapPath(baseDirectory + "/test.bat");

test.bat 文件只包含一行 echo hello。当我尝试直接从 CMD 运行它并双击时,它在这两种情况下都运行良好。只有在从 C# 代码调用它的情况下,我才会遇到问题。

我不会在输出流中得到任何结果。该批处理文件将在后台运行一个进程,该进程不会在流中返回任何输出。这不是重复的问题。请停止将此标记为重复。

【问题讨论】:

  • 我不会在输出流中得到任何结果。该批处理文件将在后台运行一个进程,该进程不会在流中返回任何输出。这不是重复的问题。
  • @Sentry 我没有从“如何执行..”问题中的指定代码获得预期的输出。这不是重复的问题。
  • @vdwwd 我没有从“如何执行..”问题中的指定代码中获得预期的输出。这不是重复的问题。
  • @vikscool 我已经检查了您分享的链接。但它的不同问题。谢谢。

标签: batch-file cmd


【解决方案1】:
 Process process = new Process();
 ProcessStartInfo startInfo = new ProcessStartInfo();
 StartInfo.UseShellExecute = false;
 StartInfo.RedirectStandardOutput = true;
 StartInfo.FileName = "test.bat";
 process.StartInfo = startInfo;
 process.Start();
 string output = process.StandardOutput.ReadToEnd();
 process.WaitForExit();

【讨论】:

  • 我尝试在代码中添加以下行,但仍然没有运气。命令提示符未打开。 StartInfo.RedirectStandardOutput = true;字符串输出 = process.StandardOutput.ReadToEnd();
  • 如果这是运行.bat 脚本,也许设置UseShellExecute=true 会有所帮助。
  • @lit 我也试过了,但在这种情况下,WorkingDirectory 是不同的,并且设置 UseShellExecute 必须为 false。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 2012-12-02
  • 2014-09-03
  • 1970-01-01
相关资源
最近更新 更多