如何从C#控制台运行多个CMD命令应用程序
问题描述:
我期待在c#应用程序中自动创建nupkg。我打算在我的项目中包含nuget.exe,并使用System.Diagnostics作为进程启动cmd.exe,然后传递所需的命令,这将是'cd project \ path \ here','nuget spec something.dll '和'nuget pack something.nuspec'。如何从C#控制台运行多个CMD命令应用程序
我到目前为止的代码是:
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\System32\cmd.exe", @"mkdir testdir");
p.StartInfo = info;
p.Start();
Console.ReadLine();
然而,它甚至不创造TESTDIR,和我没有想法链如何将这些命令。在我的Process上有一个名为WaitForInputIdle的方法,但它引发了事件,我不知道如何处理这些事实。
一个完美的解决方案还可以让我读取输出和输入。我已经尝试过使用StreamWriter p.StandardInput,但是接下来会出现检查命令是否已完成以及结果如何的问题。
任何帮助将不胜感激。
编辑:成功!我已经成功地创建一个目录:) 这里是我的代码现在:
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\System32\cmd.exe");
info.RedirectStandardInput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
using (StreamWriter sw = p.StandardInput)
{
sw.WriteLine("mkdir lulz");
}
仍然不知道如何等待输入和跟进更多的命令,虽然。
答
您可以通过三种方式
1最简单的方法是将两个命令与“&”符号结合起来做。
var processInfo = new ProcessStartInfo("cmd.exe", @"command1 & command2");
2-通过ProcessStartInfo设置进程的工作目录。
var processInfo = new ProcessStartInfo("cmd.exe", @"your commands here ");
processInfo.UseShellExecute = false;
processInfo.WorkingDirectory = path;
3-重定向过程的输入和输出。 (另外通过的ProcessStartInfo完成)当您想更多的输入发送给该进程。这是必需的,或当你想获得过程
的输出也看到this answer
'Directory.CreateDirectory'或创建bat-file并运行它。 – Sinatr
Sinatr我不打算创建一个目录,那只是想让cmd工作。 – Nech
既然你可以回答你自己的问题,如果你没有发布你的解决方案作为编辑,但作为答案,它会很好。 –