2014-03-28 65 views
3

对于一家公司(超过1000名员工),我们要检查是否每个人都安装了最新的Java(build 1.7.0_51-b13)。如果用户没有最新版本的Java,则会通知用户更新其Java版本。哪个Java版本检查

在脚本中可以运行“java -version”,但Java并不总是在系统变量中。要找出Java的安装位置,脚本必须检查用户正在运行的是哪个Windows。这可以是XP,Windows 7或8.但我有点卡住了,因为我认为应该有更好更简单的解决方案。

+1

难道Java的最新版本成为Java 8? :p –

+1

你可以说如果路径没有配置,那么Java配置不正确?您可能会在超级用户中得到更好的答案,因为它更多地涉及系统配置/ shell脚本/等,而不是编程。 –

+0

不是java已经通知人是否过期了吗? – DankMemes

回答

0

它要复杂得多。 JAVA_HOME的设置可能与PATH不同,并且更糟糕的是,JRE安装喜欢将JAVA.EXE复制到C:\Windows\System32文件夹,JDK安装不执行此操作。所以你最终可能会从命令行运行JAVA.EXE和JAVA.EXE,每个版本都是不同的。我想在C:\Windows\System32文件夹中,你有上次启动的JRE安装的那些EXE文件,但它们不一定是那些只要编写JAVA.EXE就能运行的文件。

因此,知道您已安装最新版本是不够的,但您需要确保使用适当的Java版本启动您的应用程序。某些应用程序的配置文件中包含JAva版本,例如在Eclipse.ini中。

2

我可能会做的是创建一个java程序做检查,以便路径变量不重要。尝试类似于

public class Checker { 
    public static void main(String[] args){ 
     String[] version = System.getProperty("java.version").split("\\."); // it's regex so we have to escape it 
     int first=Integer.parseInt(version[0]); 
     int second=Integer.parseInt(version[1]); // the property is in the form x.x.x 
     if(first==1 && second < 7){ // check for less than 1.7.x, modify this to suit your needs, I would change it to 1.8.x as soon as official java 8 is released 
      // prompt to update 
     } 
    } 
} 

然后只需将它作为jar编译并分发即可。这当然假设人们首先有一些版本为的,但我假设他们是从你的问题开始的。

0

试试这个:

Regedit /e \\gaia\%USERDOMAIN%.reg HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft 

并解析文件。 Whearat gaia是您的网络驱动器。

该文件将包含的条目是这样的:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft] 
"RegDeployStatus"="0" 

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit] 
"CurrentVersion"="1.5" 

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.5] 
"JavaHome"="C:\\Program Files\\Java\\jdk1.5.0_22\\" 
"MicroVersion"="0" 
+0

我希望你有域名DHCP来自动调用'LOGONSCR.cmd'。 –