我们的网络有大约 250 台 PC,我想将 Java 更新部署到这些 PC 上。作为分发软件,我们使用 SCCM 2012/SCUP 2011。
注意:我需要部署 x86 和 x64 版本。
因此我创建了两个具有以下规则的更新:
Installable Rule
Registry Value 'HKLM\Software\JavaSoft\Java Runtime Environment\CurrentVersion' exists
Installed Rule
Registry String 'HKLM\Software\JavaSoft\Java Runtime Environment\Java7FamilyVersion' Begins With '1.7.0_11'
现在问题:
java.exe
正在计算机上运行(例如由于打开了浏览器窗口):java 的更新例程会卸载旧的 java 版本;安装程序失败,因为java.exe
仍在运行(尽管已被卸载)。下次用户重新启动时,机器上不会安装任何 java有些用户启用了 Java 的自动更新功能。因此,每当发布新版本时,它都会自动更新(这不是问题)。但在下一个部署周期中,
SCCM
会尝试再次安装上一个更新。(7U12 已发布并自动更新,但SCCM
仍有 7U11 并尝试安装,尽管用户有较新的版本)
任何帮助都将不胜感激!
答案1
对于您的第一个问题(Java.exe 正在运行)
我使用 powershell 脚本来安装 Java,它(除其他功能外)会关闭三大浏览器。我将它粘贴在下面以供参考:
function Get-ScriptDirectory{
$Invocation = (Get-Variable MyInvocation -Scope 1).Value
try {
Split-Path $Invocation.MyCommand.Path -ea 0
}
catch {
Write-Warning 'You need to call this function from within a saved script.'
}
}
function Get-Architecture{
return $(gwmi win32_operatingsystem).OSArchitecture
}
$Path = Get-ScriptDirectory
#Close all instances of IE, Firefox, & Chrome
Get-Process | where {$_.ProcessName -match "iexplore"} | Stop-Process -Force
Get-Process | where {$_.ProcessName -match "chrome"} | Stop-Process -Force
Get-Process | where {$_.ProcessName -match "firefox"} | Stop-Process -Force
#Install
Start-Process -FilePath "$Path\jre-6u41-windows-i586.exe" -ArgumentList "/s /v`"/qb REBOOT=ReallySuppress JAVAUPDATE=0 WEBSTARTICON=0 SYSTRAY=0`"" -Wait
#Also Install the 64-bit JRE if on a 64 workstation
if(Get-Architecture -match "64")
{
Start-Process -FilePath "$Path\jre-6u41-windows-x64.exe" -ArgumentList "/s /v`"/qb REBOOT=ReallySuppress JAVAUPDATE=0 WEBSTARTICON=0 SYSTRAY=0`"" -Wait
}
#Import reg keys to disable auto updating
reg import "$Path\JavaUpdate.reg"
您可能还会注意到,它会安装 32 位 Java每一个机器,并在对操作系统进行 64 位检查后在 64 位机器上安装 64 位 java。
我把这个脚本和 Java exes 打包成一个 sfx 文件,然后解压并运行
powershell.exe -executionpolicy bypass -noprofile -file C:\Temp\Java\install.ps1
对于您的第二个问题,Java 检查两个注册表项以进行自动更新:
HKLM\SOFTWARE\JavaSoft\Java Update\Policy\EnableAutoUpdateCheck
HKLM\SOFTWARE\JavaSoft\Java Update\Policy\EnableJavaUpdate
他们两个都必须设置为 0 才能禁用自动更新(某些版本的 Java 读取一个键,而某些版本的 Java 读取其他键)。我使用包部署注册表项,如您在脚本中看到的那样,但我还使用 SCCM 2012s DCM 并将它们设置为配置项,并启用对它们的修复以确保它们始终为 0。