C # Захват вывода командной строки из пользовательских команд с использованием класса Process - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть свои собственные команды для приложения Windows для выполнения определенных операций в моем приложении, и оно генерирует выходные данные и отображает их в командной строке независимо от того, была ли выполнена конкретная операция, или выводит сообщение об ошибке, если по какой-либо причине произошел сбой.

Ниже приведен пример пользовательской команды для моего приложения:

C:\ProgramFiles\SampleApp> START MYAPP \TEST \GETDATA "SAMPLE.TXT"
Authorization successful.
Data retrieved successfully.

C:\ProgramFiles\SampleApp> START MYAPP \TEST \GETDAATA "SAMPLE.TXT"
Authorization successful.
Invalid command parameter.

Теперь я попытался захватить этот вывод, используя класс Process, но в итоге все время получал пустую строку.(Я испробовал все возможности, такие как вызов события OutputDataReceived, использование StandaradOutput и т. Д.) *

Ниже приведен пример, в котором я пытался прочитать выходные данные командной строки.

                    Process cliProcess = new Process();
                    cliProcess.StartInfo.FileName = meter.MeterIpAddress;                        
                    cliProcess.StartInfo.FileName = "cmd.exe";
                    cliProcess.StartInfo.Arguments = "START \TEST \GETDATA "SAMPLE.TXT";
                    cliProcess.StartInfo.WorkingDirectory = !string.IsNullOrWhiteSpace(workingDirectory) ? workingDirectory : string.Empty;
                    cliProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                    cliProcess.StartInfo.UseShellExecute = false;
                    cliProcess.StartInfo.RedirectStandardOutput = true;
                    cliProcess.StartInfo.RedirectStandardError = true;
                    cliProcess.StartInfo.CreateNoWindow = true;
                    cliProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                    cliProcess.Exited += CliProcess_Exited;
                    cliProcess.OutputDataReceived += new DataReceivedEventHandler(CliProcess_OutputDataReceived);
                    cliProcess.ErrorDataReceived += CliProcess_ErrorDataReceived;
                    cliProcess.EnableRaisingEvents = true;
                    cliProcess.Start();
                    cliProcess.BeginOutputReadLine();
                    cliProcess.BeginErrorReadLine();

private void CliProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
                   {
                      if (e.Data != null)
                      {
                          temp.AppendLine(e.Data);
                      }

                   }

private void CliProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e)
    {
        if (e.Data != null)
        {
            temp.AppendLine(e.Data);
        }
    }

Как-нибудь иначе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...