How To: Execute command line in C#, get STD OUT results

后端 未结 17 1246
既然无缘
既然无缘 2020-11-21 13:12

How do I execute a command-line program from C# and get back the STD OUT results? Specifically, I want to execute DIFF on two files that are programmatically selected and wr

17条回答
  •  日久生厌
    2020-11-21 14:03

    Since the most answers here dont implement the using statemant for IDisposable and some other stuff wich I think could be nessecary I will add this answer.

    For C# 8.0

    // Start a process with the filename or path with filename e.g. "cmd". Please note the 
    //using statemant
    using myProcess.StartInfo.FileName = "cmd";
    // add the arguments - Note add "/c" if you want to carry out tge  argument in cmd and  
    // terminate
    myProcess.StartInfo.Arguments = "/c dir";
    // Allows to raise events
    myProcess.EnableRaisingEvents = true;
    //hosted by the application itself to not open a black cmd window
    myProcess.StartInfo.UseShellExecute = false;
    myProcess.StartInfo.CreateNoWindow = true;
    // Eventhander for data
    myProcess.Exited += OnOutputDataRecived;
    // Eventhandler for error
    myProcess.ErrorDataReceived += OnErrorDataReceived;
    // Eventhandler wich fires when exited
    myProcess.Exited += OnExited;
    // Starts the process
    myProcess.Start();
    //read the output before you wait for exit
    myProcess.BeginOutputReadLine();
    // wait for the finish - this will block (leave this out if you dont want to wait for 
    // it, so it runs without blocking)
    process.WaitForExit();
    
    // Handle the dataevent
    private void OnOutputDataRecived(object sender, DataReceivedEventArgs e)
    {
        //do something with your data
        Trace.WriteLine(e.Data);
    }
    
    //Handle the error
    private void OnErrorDataReceived(object sender, DataReceivedEventArgs e)
    {        
        Trace.WriteLine(e.Data);
        //do something with your exception
        throw new Exception();
    }    
    
    // Handle Exited event and display process information.
    private void OnExited(object sender, System.EventArgs e)
    {
         Trace.WriteLine("Process exited");
    }
    

提交回复
热议问题