当我试图以编程方式检测我的 PC 上的 java 版本时,我面临着非常奇怪的行为。我正在使用以下 C# 代码:
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c java -version");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();
// Get the output into a string
output = proc.StandardOutput.ReadToEnd();
if (output == "")
output = proc.StandardError.ReadToEnd();
return output;
这将显示正确的信息,但结果是在 proc.StandardError.ReadToEnd() 而不是 proc.StandardOutput.ReadToEnd() 中找到的,就像在任何其他命令中一样(即“java -help”)。
更奇怪的是,如果我运行应该输出 java 版本和帮助信息的“java -showversion”,我会在 StandardOutput 中获得帮助信息,而版本信息在 StandardError 中。这对我来说没有意义。
我在 2 台 Windows 7 x64 机器和 1 台 XP x32 上对此进行了测试。到处都是一样的东西。这真的很奇怪。