c# - 如何使用 C# 以编程方式检查 jre 环境是 32 位还是 64 位?

标签 c# java jvm-hotspot jvm-crash

我有一个 jre 文件夹,基本上是 java 运行时,它没有安装,我从其他地方复制了这个文件夹,现在我需要手动检查这个 jre 是 32 位还是 64 位,而不需要编写任何代码,如果必须编写代码,那么它应该是 c#。 所有示例都告诉 system.getproperty("java...model") 用于获取已安装 jre 的目标类型的信息,但我没有安装此 jre,而是刚刚复制了此 jre。 那么有什么方法可以知道它的目标类型是 32 位还是 64 位。

最佳答案

C# 代码

// *** Main code
string output = RunExternalExe("java.exe -version");

// Parse output here...


// *** Helper methods
public string RunExternalExe(string filename, string arguments = null)
{
    var process = new Process();

    process.StartInfo.FileName = filename;
    if (!string.IsNullOrEmpty(arguments))
    {
        process.StartInfo.Arguments = arguments;
    }

    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    process.StartInfo.UseShellExecute = false;

    process.StartInfo.RedirectStandardError = true;
    process.StartInfo.RedirectStandardOutput = true;
    var stdOutput = new StringBuilder();
    process.OutputDataReceived += (sender, args) => stdOutput.Append(args.Data);

    string stdError = null;
    try
    {
        process.Start();
        process.BeginOutputReadLine();
        stdError = process.StandardError.ReadToEnd();
        process.WaitForExit();
    }
    catch (Exception e)
    {
        throw new Exception("OS error while executing " + Format(filename, arguments)+ ": " + e.Message, e);
    }

    if (process.ExitCode == 0)
    {
        return stdOutput.ToString();
    }
    else
    {
        var message = new StringBuilder();

        if (!string.IsNullOrEmpty(stdError))
        {
            message.AppendLine(stdError);
        }

        if (stdOutput.Length != 0)
        {
            message.AppendLine("Std output:");
            message.AppendLine(stdOutput.ToString());
        }

        throw new Exception(Format(filename, arguments) + " finished with exit code = " + process.ExitCode + ": " + message);
    }
}

private string Format(string filename, string arguments)
{
    return "'" + filename + 
        ((string.IsNullOrEmpty(arguments)) ? string.Empty : " " + arguments) +
        "'";
}


命令示例输出
我的盒子上有 64 位 java 版本。这是它的输出:

C:\Program Files\Java\jdk1.7.0_45\bin>java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

请注意提到的64 位。你可能会发现这个SO answer有用。

关于c# - 如何使用 C# 以编程方式检查 jre 环境是 32 位还是 64 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20682654/

相关文章:

c# - Unity无法使用Admob解决

c# - 如何对列表中的所有元素运行方法 c# 以缩短加载时间

java - Oop Maps 在 Hotspot VM 中到底意味着什么

java - JVM 选项的完整列表

c# - 不使用数据源控件的 gridview Inner Join 查询

c# - 具有基于 Entity Framework 实体的验证的 Javascript 数据库

java - Android queryIntentActivities 总是返回空列表

java - swt 教程或指南

java - .net 和 java 的不同 MD5 哈希值

makefile - 从源代码构建 jdk(openjdk-7)