C# 如何获得当前的Java版本?

C# 如何获得当前的Java版本?,c#,java,C#,Java,如何使用c#获得当前可用的Java版本 我已经找到了一种在我的PC上使用C#获取java版本的方法,但我需要能够将安装的版本与可用的最新版本进行比较。目前,我无法找到API或web服务来获取此信息 希望这里有人知道答案。试试: ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "javac"; psi.UseShellExecute = true; psi.RedirectStandardError = true; ps

如何使用c#获得当前可用的Java版本


我已经找到了一种在我的PC上使用C#获取java版本的方法,但我需要能够将安装的版本与可用的最新版本进行比较。目前,我无法找到API或web服务来获取此信息

希望这里有人知道答案。

试试:

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "javac";
psi.UseShellExecute = true;
psi.RedirectStandardError = true;

psi.Arguments = "-version";
Process p = Process.Start(psi);
string strOutput = p.StandardError.ReadToEnd();
p.WaitForExit();
然后应该解析输出字符串。此输出通常如下所示:

javac 1.6.0_27

如果您对运行时环境(RE)感兴趣,请将
javac
替换为
java

查找所有java.exe文件并将其作为“java-version”运行。输出如下所示:

java version "1.6.0_35"
Java(TM) SE Runtime Environment (build 1.6.0_35-b10)
Java HotSpot(TM) Client VM (build 20.10-b01, mixed mode, sharing)
所以你可以说出这个版本


您还应该查找已安装的java版本所使用的文件夹结构。

最新版本可用

您可以从此页面获取可供下载的当前版本:

使用此选择器

.jvc0w2 > strong:nth-child(3)
像这样的库使这变得简单

当前安装的版本

RegistryKey rk = Registry.LocalMachine;
RegistryKey subKey = rk.OpenSubKey("SOFTWARE\\JavaSoft\\Java Runtime Environment");

string currentVerion = subKey.GetValue("CurrentVersion").ToString();
注意事项

您需要协调这两个字符串的格式以进行比较


如果我用来检查当前版本的网站发生更改,您可能需要更新选择器。

使用C#运行unix命令。回显您拥有的Java版本。我不知道如果没有硬编码,你怎么知道Java的最新版本。你的问题很不清楚。你是想从某人那里找到最新的Java版本(有很多不同的版本)还是想在某些机器上找到最新的版本?我想写一些代码,到一些api、web服务上,找出代码的最新版本。然后将其与用户安装的内容进行比较。有了这些信息,我将做一些其他的事情。看看这是一个C#或Java问题,William正在寻找代码而不是命令run@MicahArmantrout我不是这样理解这个问题的。它并没有说他在寻找代码。我读到他可以找到安装的版本,但需要知道如何在机器上找到其他版本。在我看来,查找文件、运行程序和收集输出似乎是一个细节。“目前我找不到API或web服务来获取这些信息”@MicahArmantrout,我解释了一种不使用任何一种方法的方法。“我们可能只是在这一点上有分歧,先生。”MicahArmantrout说,“因为您正在跨越VM平台,所以没有好的方法从.NET中询问Java问题
exec
是最实用的选项。这对我来说失败了,我已经安装了Java 1.7.0_25。(在命令行中找不到javac或java)当然,这并不意味着没有安装java。但是,由于没有人知道java编译器位于何处(除非执行硬盘搜索),因此应该使用这样一个事实,即java通常会将自己添加到$PATH环境中。在进程启动的行周围添加一个try/catch块可能是对javac存在性的延迟检查,System.InvalidOperationException未经处理HResult=-2146233079 Message=流程对象必须将UseShellExecute属性设置为false才能重定向IO流。当我这样做(将UseShellExecute设置为false)时,我得到“系统找不到指定的文件”@B.ClayShannon:事实上,这是一个关于shell的错误。但是关于文件,这取决于实际编译器绑定
javac
的级别。最好不要在编译器级别这样做。在Oracle更改该页面的结构/css之前。@mikeTheLiar是的,我在底部这样说。重要的警告。感谢您提到这一点,因为很容易忘记这种依赖关系。首先,我不能使用第三方软件包。第二,mikeTheLiar是对的,如果我在页面上搜索版本#当下一个版本出来时,如果格式不同,我就必须重新编码。但是回答你问题的人中似乎有一个是壁橱。因此,我在这里收集的是,没有一个web服务或api允许用户出去获取最新的Java版本。必须有一种方法考虑安装的java,让用户知道有一个更新的版本可用。它可能对公众不可用,我必须解决一些问题您根本不必使用第三方软件包,如果您没有从头开始做很多工作,它只会使解析HTML变得更容易。第二个问题是有效的,页面可能会改变,但我不知道有什么更直接的方法可以咨询Java gods最新的版本。当我转到链接并单击“获取Java版本”(或其他)时,它告诉我我没有所需的插件。我在regedit中找不到HKEY_LOCAL_MACHINE\软件中的JavaSoft文件夹