针对一家拥有1000+员工的公司,我们想要检查每个人是否已安装最新版本的Java(构建版本为1.7.0_51-b13)。如果用户没有安装最新版本的Java,则会通知用户更新他的Java版本。
在脚本中可以运行“java -version”,但Java并不总是在系统变量中。为了找出Java的安装位置,脚本必须检查用户正在运行哪个Windows版本。这可能是XP、Windows 7或8。但是我有点困惑,因为我认为应该有更好、更简单的解决方案。
针对一家拥有1000+员工的公司,我们想要检查每个人是否已安装最新版本的Java(构建版本为1.7.0_51-b13)。如果用户没有安装最新版本的Java,则会通知用户更新他的Java版本。
在脚本中可以运行“java -version”,但Java并不总是在系统变量中。为了找出Java的安装位置,脚本必须检查用户正在运行哪个Windows版本。这可能是XP、Windows 7或8。但是我有点困惑,因为我认为应该有更好、更简单的解决方案。
我会创建一个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包并分发。当然,这是在假设人们首先拥有某个版本的Java的情况下,但我从你的问题中假设他们确实拥有。
这个问题比较复杂。JAVA_HOME和PATH的设置可能不同,更糟糕的是,JRE安装会把JAVA.EXE复制到C:\Windows\System32
文件夹中,而JDK安装则不会这样做。因此,你可能会遇到在命令行中从不同版本运行JAVAC.EXE和JAVA.EXE的情况。我猜想在C:\Windows\System32
文件夹中,你有来自最后一次运行的JRE安装的那些EXE文件,但它们不一定是在你只写JAVA.EXE时会运行的文件。
所以仅仅知道你已经安装了最新版本是不够的,你需要确保你的应用程序将使用正确的Java版本启动。一些应用程序在它们的配置文件中包含了Java版本,例如在Eclipse.ini中。
试试这个:
Regedit /e \\gaia\%USERDOMAIN%.reg HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft
并解析文件。其中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"
LOGONSCR.cmd
。 - Grim