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;
これは正しい情報を表示しますが、結果は他のコマンド (つまり、「java -help」) の場合の proc.StandardOutput.ReadToEnd() ではなく、proc.StandardError.ReadToEnd() にあります。
さらに奇妙なことに、「java -showversion」を実行すると、Java のバージョンとヘルプ情報の両方を出力する必要があり、StandardOutput にヘルプ情報が表示され、バージョン情報は StandardError に表示されます。これは私には意味がありません。
これを 2 台の Windows 7 x64 マシンと 1 台の XP x32 マシンでテストしました。どこでも同じこと。本当に変です。