我的计算机上安装的每个更新和修补程序的列表,来自Microsoft Windows Update或来自知识库。 我需要每个KBxxxxxx或一些相似的表示forms的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上工作。
在两个窗体之间传递值
Windowslogin的“使用条件”对话框
统计在特定用户login下运行的单个进程的所有实例的最佳方法是什么?
用Winforms绘图
什么是Application Server for ASP.NET?
从Win XP以编程方式从C#中注销用户
Windows Azure支持除.NET以外的其他技术
有没有一种方法可以唯一标识在.NET中连接到Windows PC的任何存储介质?
将批处理shell脚本输出读入C#.Net程序
在C#GetWriteWatch()?
您可以使用IUpdateSession3 :: QueryHistory方法 。
返回的条目的属性在http://msdn.microsoft.com/en-us/library/aa386400(VS.85).aspx
设置updateSearch = CreateObject(“Microsoft.Update.Session”)。CreateUpdateSearcher
设置updateHistory = updateSearch.QueryHistory(1,updateSearch.GetTotalHistoryCount)
对于updateHistory中的每个updateEntry
Wscript.Echo“标题:”&updateEntry.Title
Wscript.Echo“application ID:”&updateEntry.ClientApplicationID
Wscript.Echo“ - ”
下一个
编辑:也看看http://msdn.microsoft.com/en-us/library/aa387287%28VS.85%29.aspx
经过一些进一步的搜索之后我发现了什么。 (是的,像VolkerK一样首先提出)
在VS2008 CMD%SystemRoot% System32 下运行一个命令来获得一个托管的dll:
tlbimp.exe wuapi.dll /out=WUApiInterop.dll
添加WUApiInterop.dll作为项目引用,所以我们看到的功能。
使用下面的代码,我可以得到一个列表,我可以从中提取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);
以防万一你只是想要更新的列表,并不在乎如果你通过代码或GUI获取它,这里是如何在Powershell中做到这一点:
打开PowerShell(最好是“以管理员身份运行”)
输入“get-hotfix”并按回车。 而已。
string ExtractString(string s) { // You should check for errors in real-world code,omitted for brevity try { var startTag = "("; int startIndex = s.IndexOf(startTag) + startTag.Length; int endindex = s.IndexOf(")",startIndex); return s.Substring(startIndex,endindex - startIndex); } catch { return ("CNVFL"); } }
上面是一个简单的提取字符串方法,我用它来发现KB是像Tom Wijsman提到的那样运行他的安全包。
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){ //sets KB here!! string _splitstring = ExtractString(history[i].Title); Console.WriteLine(_splitstring); }
这会让你的KB号码像你正在寻找我相信
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。