Process.Start(processInfo)响应为空

时间:2017-08-14 11:24:10

标签: c# .net

我需要使用System.Diagnostics.Process.Start(processInfo)调用exe并想要返回一些值。基于返回值,我需要执行进一步的操作。 Exe被调用并准确执行任务,但我无法获得返回值。 process.Start()没有异常或警告后,代码卡住了。

string arguments = arg[0]+ " " + arg[1] + " " + arg[2] + " " + arg[3];
string consoleExePath = @"C:\Test\Console.exe";
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.WindowStyle = ProcessWindowStyle.Hidden;
processInfo.FileName = "cmd.exe";
processInfo.RedirectStandardOutput = true;
processInfo.UseShellExecute = false;
processInfo.WorkingDirectory = Path.GetDirectoryName(consoleExePath);
processInfo.Arguments = string.Format("/c START {0} {1}", Path.GetFileName(consoleExePath), arguments);
System.Diagnostics.Process p = System.Diagnostics.Process.Start(processInfo);
var output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
int result = p.ExitCode; // always 0

exe内部的代码:

static int Main(string[] args)
{
  var flag = 0;
  flag=   objTest.DoSomething(args[0],args[1], args[2], args[3]);
  //Console.WriteLine("Process completed!");
  //Console.Read();
  //return flag;
  return 44; // a non zero value.
}

编辑:由于Console.Read();,代码执行被卡住了。感谢schnaader抓住这个愚蠢的错误。但是var output = p.StandardOutput.ReadToEnd();仍然是空的。已尝试int result = p.ExitCode;result始终为0

1 个答案:

答案 0 :(得分:2)

您的代码适合我。请注意,在.exe代码中,有一行:

Console.Read();

因此程序将等待用户输入一行,然后才退出。如果您不这样做,其他代码将等待应用程序终止,如您所述。

所以你应该删除该行并再试一次。

Christian.K在评论中指出的另一种可能性是使用processInfo.RedirectStandardInput = true重定向标准输入。这样,您就不必修改.exe代码。之后,您可以将内容重定向到.exe的标准输入,请参阅MSDN for a full example