当前位置: 首页 > 面试题库 >

如何确定Windows Java安装位置

申屠涛
2023-03-14
问题内容

我正在尝试从C#程序集(使用Process.Start(info))动态运行.jar 。现在,可以从控制台应用程序运行:

ProcessStartInfo info = new ProcessStartInfo("java", "-jar somerandom.jar");

但是,在一个程序集中,我不断收到Win32Exception“系统找不到指定的文件”的信息,必须将行更改为Java的完整路径,如下所示:

ProcessStartInfo info = new ProcessStartInfo("C:\\Program Files\\Java\\jre6\\bin\\java.exe", "-jar somerandom.jar");

这显然不会。我需要一种动态(但声明式)确定Java安装位置的方法。

我开始考虑查找注册表,但是到那里时,我注意到版本有特定的键,甚至不能保证它们是数字的(例如“ HKEY_LOCAL_MACHINE \ SOFTWARE \
JavaSoft \ Java Runtime Environment \ 1.6”和“ HKEY_LOCAL_MACHINE \ SOFTWARE \
JavaSoft \ Java运行时环境\ 1.6.0_20”)。

从C#应用程序中找到最新的java.exe路径的最可靠的“长途”解决方案是什么?

在此先感谢。

-编辑-

多亏了GenericTypeTea的回答,我用以下方法解决了这个问题:

private String GetJavaInstallationPath()
{
    String javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment";
    using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(javaKey))
    {
        String currentVersion = baseKey.GetValue("CurrentVersion").ToString();
        using (var homeKey = baseKey.OpenSubKey(currentVersion))
            return homeKey.GetValue("JavaHome").ToString();
    }
}

问题答案:

您可以通过注册表进行操作。但是,您在错误的位置寻找。我为您提供了一个简单的例子:

private string GetJavaInstallationPath()
{
    string environmentPath = Environment.GetEnvironmentVariable("JAVA_HOME");
    if (!string.IsNullOrEmpty(environmentPath))
    {
       return environmentPath;
    }

    string javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment\\";
    using (Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(javaKey))
    {
        string currentVersion = rk.GetValue("CurrentVersion").ToString();
        using (Microsoft.Win32.RegistryKey key = rk.OpenSubKey(currentVersion))
        {
            return key.GetValue("JavaHome").ToString();
        }
    }
}

然后使用它,只需执行以下操作:

string installPath = GetJavaInstallationPath();
string filePath = System.IO.Path.Combine(installPath, "bin\\Java.exe");
if (System.IO.File.Exists(filePath))
{
    // We have a winner
}


 类似资料:
  • 特别是在从WebPackV1过渡到v2的过程中,以编程方式确定安装了什么webpack版本是很重要的,但我似乎找不到合适的API。

  • 问题内容: 尤其是在从webpack v1到v2的过渡期间,以编程方式确定所安装的webpack版本非常重要,但我似乎找不到合适的API。 问题答案: webpack 4现在提供了可以使用的version属性!

  • 但这似乎没有任何选择来给我想要的信息。

  • 问题内容: 目前我在下面安装了rvm 如何将rvm移到该位置? 我尝试使用rvmrc文件来解决此问题(根据此处的rvm文档:https ://rvm.io/workflow/rvmrc/ ),但是没有运气,我在下面找到了一个文件 我可以遵循任何分步说明吗? 问题答案: 通过在线研究找出自己,希望这可以帮助某人: 假设您要从移至 更新您或更新为: 找到您的under ,如果找不到,创建一个并在其中添

  • 如果我有一个启动程序脚本,我如何确定JVM是否支持模块(例如9+),以决定是使用还是脚本启动?