如何使用 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