У меня есть свои собственные команды для приложения 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);
}
}
Как-нибудь иначе?