我正在尝试从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+),以决定是使用还是脚本启动?