2017-08-28 68 views
0

我期待在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"); 
     } 

仍然不知道如何等待输入和跟进更多的命令,虽然。

+0

'Directory.CreateDirectory'或创建bat-file并运行它。 – Sinatr

+0

Sinatr我不打算创建一个目录,那只是想让cmd工作。 – Nech

+0

既然你可以回答你自己的问题,如果你没有发布你的解决方案作为编辑,但作为答案,它会很好。 –

回答

0

您可以通过三种方式

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

相关问题