在Windows机器上通过命令行静默安装JDK 8和JRE 8

13
我们希望在多台机器上更新JDK环境,这些机器都运行着不同版本的Windows系统(XP或7)。
为此,我正在创建一个脚本,它将自动运行正确的安装程序(32位/64位)。我尝试使用以下命令运行安装程序:
jdk-8u25-windows-x64.exe /s ADDLOCAL="ToolsFeature,SourceFeature,PublicjreFeature"
这在没有安装JDK/JRE 8的计算机上运行得很好。然而,我遇到了一些问题:
- 如果已经安装了JDK/JRE 8,则安装程序会卸载JDK和JRE,而不是简单地不执行任何操作(或重新安装)。 - 如果需要重新启动,则会自动强制执行,并且我需要避免这种情况,因为安装完成后我需要在脚本中执行其他操作。 - 没有VERBOSE模式/日志文件来指示安装程序实际正在执行的操作。
我查看了这些资源:

但它们似乎不太完整,让人很困惑,不知道哪个能给我想要的结果。


将其部署为/在文件夹中,并调整环境变量是关于什么的? - PeterMmm
在Windows机器上部署Java的方式是否安全?安装程序是否还设置了一些可能被某些程序需要的不同注册表值? - Dagan Sandler
取决于您的使用情况。您是否使用Java浏览器插件?如果是,您不应该使用它,即使强制使用,这也可能无法正常工作。您是通过双击运行.jar文件的吗?这种解决方案也可能不起作用。我不确定会发生什么,如果您进行版本不可知的初始安装(指定C:\ java作为安装文件夹),然后将新版本简单地复制到该文件夹中。 - PeterMmm
有太多的“if”,我宁愿让静默安装程序正常工作。我真的觉得它的文档太少了,这很奇怪。 - Dagan Sandler
4个回答

10

我会分别处理JDK和JRE:

JDK不依赖于注册表项或安装程序exe的其他内容。因此,只需在一台计算机上安装没有公共JRE的JDK。

jdk-8u25-windows-x64.exe /s ADDLOCAL="ToolsFeature,SourceFeature"

然后,您可以简单地压缩生成的安装文件,将其复制并解压缩到其他相同操作系统类型的计算机上。

JRE安装程序(从Oracle单独下载)可以按照此处记录的选项和配置文件运行:http://docs.oracle.com/javase/8/docs/technotes/guides/install/windows_installer_options.html

假设配置文件与安装程序exe在同一目录中,则可以使用选项INSTALLCFG="%cd%\jre-install-options.cfg"。否则,需要提供配置文件的完整路径(INSTALLCFG="c:\path\to\jre-install-options.cfg")。因此,可以像这样执行(带有日志文件,并假定配置文件与exe在同一目录中):

jre-8-windows-i586.exe INSTALLCFG="%cd%\jre-install-options.cfg" /s /L C:\TMP\jre-install.log

似乎以下jre-install-options.txt文件可能适合您:

INSTALL_SILENT=Enable
REBOOT=Disable
STATIC=Enable

这里列出了配置文件选项:http://docs.oracle.com/javase/8/docs/technotes/guides/install/config.html

最后一行的含义在这里解释:http://docs.oracle.com/javase/8/docs/technotes/guides/install/windows_installer_options.html#static_installation


1
相对路径的 INSTALLCFG 对我不起作用。请参见我的 SuperUser 问题。 - Thomas Weller
如果Java已经安装,安装程序会怎么做?它会卸载Java并重新安装它,还是只会卸载?在后一种情况下,它会指示它所做的事情吗,最好不要通过日志?在Java可用之前,是否实际需要重新启动计算机? - Septagram
我知道这是一个比较老的帖子,但是配置文件有REMOVEOUTOFDATEJRES标志,可以删除旧版本的JRE。将其设置为零可能会给您所需的内容。 - DynaWeb
我知道这很老,但我现在需要它,我需要复制JDK吗? - pgp1

3

看起来支持的命令行选项经常变化。对于最新的8 Update 131,我不得不放弃所有msiexec样式的选项,因为它们都不起作用。我使用我下载的Java版本的文档构建安装程序的开关。如上面的答案所示,配置文件选项可以传递给命令行安装程序。我在Packer中用于在Win2016 Server ami上安装Java的最终命令是:

Start-Process 'C:\Windows\Temp\jre-8u131-windows-x64.exe' `
  -ArgumentList 'INSTALL_SILENT=Enable REBOOT=Disable SPONSORS=Disable' `
  -Wait -PassThru

这个命令默认会将Java添加到系统路径中,但不是安装的那个路径。打开一个新的PowerShell窗口,它将在该窗口的路径中(使用$env.path检查)。
真实来源:

http://docs.oracle.com/javase/8/docs/technotes/guides/install/windows_installer_options.html http://docs.oracle.com/javase/8/docs/technotes/guides/install/config.html#table_config_file_options


1
我曾经遇到了使用 /s 选项时的类似问题。我发现了一个JDK bug https://bugs.openjdk.java.net/browse/JDK-8033364。看起来他们已经移除了对/help或/s的支持。尝试使用/qn,这对我有效。
jdk-8u92-windows-x64.exe /qn

我认为 /s 只是静默错误信息。因此,通过删除 /s,您实际上会在出现错误时看到弹出窗口。 - bvdb
这对我没有起作用,即使使用/qn开关执行上述操作时,UI仍然会出现。 - Royston
1
这对我有效(用于MDT),jre-8u231-win-x64.exe INSTALL_SILENT=1 AUTO_UPDATE=0 REBOOT=0 SPONSORS=0 REMOVEOUTOFDATEJRES=1。 - Royston

0

关于JRE的静默安装:

start /wait msiexec /i "%~ java8.40x64.msi " JU=0 JAVAUPDATE=0 AUTOUPDATECHECK=0 RebootYesNo=No WEB_JAVA=1 /q

你可以在这里看到完整的帖子here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接