簡體   English   中英

無法從Process.StandardOutput中讀取

[英]Unable to read from Process.StandardOutput

我正在嘗試使用一個進程來檢查使用“ -version”命令行參數安裝的Java的版本。 但是,當我嘗試從Java應用程序讀取命令行輸出時,會得到一個空值。

我的代碼很簡單:

Process java = new Process();
java.StartInfo.RedirectStandardOutput = true;
java.StartInfo.CreateNoWindow = true;
java.StartInfo.UseShellExecute = false;
java.StartInfo.FileName = "java";
java.StartInfo.Arguments = "-version";
java.Start();

// version comes out null
string version = java.StandardOutput.ReadLine();

// There are probably better ways to extract this data but
// I want to get it working before I cross that bridge.
string versionNumber = version.Substring(16, 1);
hasJava = int.Parse(versionNumber) < 7;

java.Close();

它可能很小而又簡單,但是我看不到。

您也可以從注冊表中讀取當前安裝的Java版本。 以下文件包含方法TryGetJavaHome ,該方法支持特定供應商/安裝組合的32位和64位虛擬機。

bool TryGetJavaHome(
    RegistryView registryView,
    string vendor,
    string installation,
    out string javaHome)

供應商:

  • “ JavaSoft”(熱點)
  • “ JRockit”

裝置:

  • “Java運行時環境”
  • “ Java開發套件”

如果查看該方法的代碼,則會發現以下獲得當前版本的行。

object currentVersion = javaKey.GetValue("CurrentVersion");

這將返回類似“ 1.7”或“ 1.6”的值。 如果需要更完整的版本號, 某些安裝程序提供以下內容。

object familyVersion6 = javaKey.GetValue("Java6FamilyVersion");
object familyVersion7 = javaKey.GetValue("Java7FamilyVersion");

對於某些安裝,不提供家庭版本,但是對於標准運行時安裝,我看到的值為“ 1.6.0_38”和“ 1.7.0_13”。

參考: Antlr4ClassGenerationTaskInternal.cs

如果刪除java.CreateNoWindow = true; , 有用。

經過測試,我發現由於某種原因,您正在尋找的信息可以在standardError流中找到。

嘗試以下方法。

Process java = new Process();
java.StartInfo.RedirectStandardError = true;
java.StartInfo.CreateNoWindow = true;
java.StartInfo.UseShellExecute = false;
java.StartInfo.FileName = "java";
java.StartInfo.Arguments = "-version";
java.Start();

// version comes out null
string version = java.StandardError.ReadLine();

// There are probably better ways to extract this data but
// I want to get it working before I cross that bridge.
string versionNumber = version.Substring(16, 1);

java.Close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM