如何从c#console app

时间:2017-08-28 10:59:24

标签: c# .net cmd process nuget

我希望在c#app中自动创建nupkg。我的目标是在我的项目中包含nuget.exe并使用System.Diagnostics将cmd.exe作为进程启动,然后传递所需的命令,这将是> cd project \ path \ here' ,' nuget spec something.dll'并且' nuget pack something.nuspec'。

我到目前为止的代码是:

        Process p = new Process();
        ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\System32\cmd.exe", @"mkdir testdir");

        p.StartInfo = info;
        p.Start();

        Console.ReadLine();

然而,它甚至没有创建testdir,我也不知道如何链接这些命令。在我的p 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 个答案:

答案 0 :(得分:1)

你可以通过三种方式来做到这一点

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