我想知道如何确定目标计算机中是否安装了特定的 Windows 更新包,例如名为的 Windows 更新包KB2919355 https://support.microsoft.com/en-us/kb/2919355.
是否存在内置功能来检查?如果不是,确定它所需的代码是什么?也许会弄乱注册表,或者可能是最干净和/或安全的方式?
伪代码:
[Setup]
...
[Files]
Source: {app}\*; DestDir: {app}; Check: IsPackageInstalled('KB2919355')
[Code]
function IsPackageInstalled(packageName): Boolean;
begin
...
Result := ...;
end;
function IsKBInstalled(KB: string): Boolean;
var
WbemLocator: Variant;
WbemServices: Variant;
WQLQuery: string;
WbemObjectSet: Variant;
begin
WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
WbemServices := WbemLocator.ConnectServer('', 'root\CIMV2');
WQLQuery := 'select * from Win32_QuickFixEngineering where HotFixID = ''' + KB + '''';
WbemObjectSet := WbemServices.ExecQuery(WQLQuery);
Result := (not VarIsNull(WbemObjectSet)) and (WbemObjectSet.Count > 0);
end;
使用如下:
if IsKBInstalled('KB2919355') then
begin
Log('KB2919355 is installed');
end
else
begin
Log('KB2919355 is not installed');
end;
Credits:
- WMI 更新查询:
如何通过命令行查询我的系统是否安装了知识库补丁? https://serverfault.com/q/263847/168875
- 使用 Inno Setup 中的 WMI:
@TLama的回答 https://stackoverflow.com/q/21390130/850848#21408578 to Inno Setup Pascal 脚本搜索正在运行的进程 https://stackoverflow.com/q/21390130/850848.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)