如何获取已安装的更新和修补程序列表?

时间:2009-05-02 18:32:30

标签: c# .net windows list

我的计算机上安装的每个更新和修补程序的列表,来自Microsoft Windows Update或知识库。我需要KBxxxxxx形式的每个ID或类似的表示......

目前我有:

const string query = "SELECT HotFixID FROM Win32_QuickFixEngineering";
var search = new ManagementObjectSearcher(query);
var collection = search.Get();

foreach (ManagementObject quickFix in collection)
    Console.WriteLine(quickFix["HotFixID"].ToString());

但这似乎没有列出所有内容,它只列出了QFE。

我需要它才能在Windows XP,Vista和7上运行。

5 个答案:

答案 0 :(得分:12)

进一步搜索我之前发现的内容。 (是的,与VolkerK先建议的相同)

  1. 在%SystemRoot%\ System32 \的VS2008 CMD下运行命令以获取托管dll:
    tlbimp.exe wuapi.dll /out=WUApiInterop.dll
  2. 将WUApiInterop.dll添加为项目参考,以便我们看到函数。
  3. 使用以下代码,我可以获得一个列表,我可以从中提取KB编号:

    var updateSession = new UpdateSession();
    var updateSearcher = updateSession.CreateUpdateSearcher();
    var count = updateSearcher.GetTotalHistoryCount();
    var history = updateSearcher.QueryHistory(0, count);
    
    for (int i = 0; i < count; ++i)
        Console.WriteLine(history[i].Title);
    

答案 1 :(得分:7)

您可以使用IUpdateSession3::QueryHistory Method 返回条目的属性在http://msdn.microsoft.com/en-us/library/aa386400(VS.85).aspx

中描述
Set updateSearch = CreateObject("Microsoft.Update.Session").CreateUpdateSearcher
Set updateHistory = updateSearch.QueryHistory(1, updateSearch.GetTotalHistoryCount)

For Each updateEntry in updateHistory
  Wscript.Echo "Title: " & updateEntry.Title
  Wscript.Echo "application ID: " & updateEntry.ClientApplicationID
  Wscript.Echo " --"
Next

编辑:另请查看http://msdn.microsoft.com/en-us/library/aa387287%28VS.85%29.aspx

答案 2 :(得分:0)

如果您只是想要更新列表并且不关心是否通过代码或GUI获取更新,以下是如何在Powershell中执行此操作:

  1. 打开PowerShell(最好以“以管理员身份运行”)
  2. 输入“get-hotfix”并按Enter键。就是这样。
  3. Get hotfixes

答案 3 :(得分:0)

window.frames

上面是一个简单的提取字符串方法,我用它来发现KB就像Tom Wijsman提到的那样安全包中并运行了他。

window.parent

这会让你得到你想要的KB号码我相信

答案 4 :(得分:0)

const string querys = "SELECT HotFixID FROM Win32_QuickFixEngineering";
var search = new ManagementObjectSearcher(querys);
var collection = search.Get();

foreach (ManagementObject quickfix in collection)
{
    hotfix = quickfix["HotFixID"].ToString();
}

listBox1.Items.Add(hotfix);

这将使用当前安装的修补程序或更新填充列表框

如果要列出所有要显示的更新和修补程序的历史记录 然后,上面提到的Tom Wijsman的上述示例将起作用