我需要使用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
。
答案 0 :(得分:2)
您的代码适合我。请注意,在.exe代码中,有一行:
Console.Read();
因此程序将等待用户输入一行,然后才退出。如果您不这样做,其他代码将等待应用程序终止,如您所述。
所以你应该删除该行并再试一次。
Christian.K在评论中指出的另一种可能性是使用processInfo.RedirectStandardInput = true
重定向标准输入。这样,您就不必修改.exe代码。之后,您可以将内容重定向到.exe的标准输入,请参阅MSDN for a full example。