使用C#在cmd中运行命令

man*_*ans 6 c# command-line cmd

我想运行一个cmd并在其中运行一些命令.我写了这段代码:

Process p = new Process();
ProcessStartInfo info =new ProcessStartInfo();

info.FileName = "cmd.exe";
info.WorkingDirectory = this.workingDirectory;
info.RedirectStandardInput = true;
info.UseShellExecute = false; 
info.CreateNoWindow = true;
p.StartInfo = info;

var x=p.Start();
using (StreamWriter sw = p.StandardInput)
{
    if (sw.BaseStream.CanWrite)
    {
        sw.WriteLine(@"set path=c:\temp"+ ";%path%");
        sw.WriteLine(@"@MyLongproces.exe");
    }
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用:

  1. 我无法看到命令窗口(即使我设置info.CreateNoWindowfalse).
  2. 我的命令没有运行.

问题是什么?我该如何解决?

  • UPDATE1

此代码不起作用:

  string binDirectory = Path.Combine(FileSystem.ApplicationDirectory, this.binFolderName);
  ProcessStartInfo info = new ProcessStartInfo("cmd", @"/c " + Path.Combine(binDirectory, command));
  info.RedirectStandardInput = false;
  info.RedirectStandardOutput = true;
  info.UseShellExecute = false;
  info.CreateNoWindow = false;
  System.Diagnostics.Process proc = new System.Diagnostics.Process();
  proc.StartInfo = info;
  proc.Start();
  string result = proc.StandardOutput.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

没有显示cmd窗口,结果为"".

但是这段代码有效:

     Process.Start(Path.Combine(binDirectory, command));
Run Code Online (Sandbox Code Playgroud)

上面代码的问题是:

  1. 我无法定义工作目录.
  2. 当我不希望它显示时,它显示一个CMD窗口.

知道为什么它不起作用吗?

小智 0

您仍然需要告诉进程您要运行什么命令。在这种情况下,听起来您希望它启动cmd.exe