mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
72 lines
2.2 KiB
C#
72 lines
2.2 KiB
C#
using System;
|
|
using System.Management;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace CustomActions
|
|
{
|
|
public class InstalledWindowsUpdateChecker
|
|
{
|
|
private readonly ManagementScope _managementScope;
|
|
|
|
public InstalledWindowsUpdateChecker()
|
|
{
|
|
_managementScope = Connect();
|
|
}
|
|
|
|
|
|
public ManagementScope Connect()
|
|
{
|
|
try
|
|
{
|
|
return new ManagementScope(@"root\cimv2");
|
|
}
|
|
catch (ManagementException e)
|
|
{
|
|
Console.WriteLine($"Failed to connect: {e.Message}");
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public ArrayList GetInstalledUpdates()
|
|
{
|
|
const string query = "SELECT * FROM Win32_QuickFixEngineering";
|
|
var installedUpdates = new ArrayList();
|
|
var searcher = new ManagementObjectSearcher(_managementScope, new ObjectQuery(query));
|
|
foreach(var o in searcher.Get())
|
|
{
|
|
var queryObj = (ManagementObject) o;
|
|
installedUpdates.Add(queryObj["HotFixID"]);
|
|
}
|
|
return installedUpdates;
|
|
}
|
|
|
|
public bool IsUpdateInstalled(string kb) => IsUpdateInstalled(new[] {kb});
|
|
|
|
public bool IsUpdateInstalled(IEnumerable<string> kbList)
|
|
{
|
|
var updateIsInstalled = false;
|
|
var whereClause = BuildWhereClauseFromKbList(kbList);
|
|
if (whereClause == "") return false;
|
|
var query = $"SELECT HotFixID FROM Win32_QuickFixEngineering WHERE {whereClause}";
|
|
var searcher = new ManagementObjectSearcher(_managementScope, new ObjectQuery(query));
|
|
if (searcher.Get().Count > 0)
|
|
updateIsInstalled = true;
|
|
return updateIsInstalled;
|
|
}
|
|
|
|
private string BuildWhereClauseFromKbList(IEnumerable<string> kbList)
|
|
{
|
|
var whereClause = "";
|
|
var counter = 0;
|
|
foreach (var kb in kbList)
|
|
{
|
|
if (counter > 0)
|
|
whereClause += " OR ";
|
|
whereClause += $"HotFixID='{kb}'";
|
|
counter++;
|
|
}
|
|
return whereClause;
|
|
}
|
|
}
|
|
} |