如何使用 NSIS 检测 windows 更新(或 KB 更新)是否已安装?
How to Detect windows update(or KB update) is installed or not using NSIS?
要执行我的 windows 应用程序,windows 机器需要一些预安装的 windows 更新(例如 KB2999226 - 我需要检查此更新)。我需要使用 NSIS 通过我的应用程序安装程序静默安装此更新。
如何检查 windows 是否已经使用 NSIS 安装了特定更新。
我试过这个 NSIS-Windows_Critical_Updates_Mass_Installer 但它不起作用。无法检查预安装的更新。
我的 windows 应用程序将 运行 在 Windows 7 SP1 及更高版本和 windows 服务器 2012 及更高版本上。所以我需要检查所有这些版本的更新。
要使用 NSIS 检查是否安装了 KB 更新,我使用了以下代码:
section
clearerrors
nsExec::ExecToStack 'cmd /Q /C "%SYSTEMROOT%\System32\wbem\wmic.exe qfe get hotfixid | %SYSTEMROOT%\System32\findstr.exe "^KB2999226""'
Pop [=10=] ; return value (it always 0 even if an error occured)
Pop ; command output
detailprint [=10=]
detailprint
sectionend
为了安装更新(.msu 文件),我使用了以下代码。
section
clearerrors
Strcpy $strInstallPath "$temp\Updates\KB2937592-x86.msu"
Push "$temp\RunMSU.Bat"
Strcpy [=11=] "$temp\RunMSU.Bat"
FileOpen [=11=] [=11=] w #open file
FileSeek [=11=] 0 END #go to end
FileWrite [=11=] "echo off"
FileWriteByte [=11=] "13"
FileWriteByte [=11=] "10"
FileWrite [=11=] "start $\"$\" wusa $\"$strInstallPath$\""
FileClose [=11=]
Execwait "$temp\RunMSU.bat"
sectionEnd
要执行我的 windows 应用程序,windows 机器需要一些预安装的 windows 更新(例如 KB2999226 - 我需要检查此更新)。我需要使用 NSIS 通过我的应用程序安装程序静默安装此更新。
如何检查 windows 是否已经使用 NSIS 安装了特定更新。
我试过这个 NSIS-Windows_Critical_Updates_Mass_Installer 但它不起作用。无法检查预安装的更新。
我的 windows 应用程序将 运行 在 Windows 7 SP1 及更高版本和 windows 服务器 2012 及更高版本上。所以我需要检查所有这些版本的更新。
要使用 NSIS 检查是否安装了 KB 更新,我使用了以下代码:
section
clearerrors
nsExec::ExecToStack 'cmd /Q /C "%SYSTEMROOT%\System32\wbem\wmic.exe qfe get hotfixid | %SYSTEMROOT%\System32\findstr.exe "^KB2999226""'
Pop [=10=] ; return value (it always 0 even if an error occured)
Pop ; command output
detailprint [=10=]
detailprint
sectionend
为了安装更新(.msu 文件),我使用了以下代码。
section
clearerrors
Strcpy $strInstallPath "$temp\Updates\KB2937592-x86.msu"
Push "$temp\RunMSU.Bat"
Strcpy [=11=] "$temp\RunMSU.Bat"
FileOpen [=11=] [=11=] w #open file
FileSeek [=11=] 0 END #go to end
FileWrite [=11=] "echo off"
FileWriteByte [=11=] "13"
FileWriteByte [=11=] "10"
FileWrite [=11=] "start $\"$\" wusa $\"$strInstallPath$\""
FileClose [=11=]
Execwait "$temp\RunMSU.bat"
sectionEnd