我正在尝试在许多不同的机器上收集 Windows 更新的准确图片,特别是 KB 安装。我已经尝试了许多不同的代码,我发现这些代码分散在各处,但我似乎仍然无法准确地描绘出所安装的内容。准确地说,我的意思是当我使用 Windows UI 检查机器上的 Windows 更新历史记录时,我收集的任何内容似乎都是显示的内容的一个子集!似乎无法弄清楚这一点!
这是我尝试过的一些事情;
UpdateSession uSession = new UpdateSession();
IUpdateSearcher uSearcher = uSession.CreateUpdateSearcher();
uSearcher.Online = false;
ISearchResult sResult = uSearcher.Search("IsInstalled=1");
foreach (IUpdate update in sResult.Updates)
{
foreach (string kbaid in update.KBArticleIDs)
{
txtAllUpdates.AppendText(kbaid + Environment.NewLine);
}
}
我还尝试在同一例程中添加代码以收集捆绑更新字段中的所有更新,如下所示;
foreach (IUpdate update2 in update.BundledUpdates)
{
txtAllUpdates.AppendText("\t--> " + update2.Title + Environment.NewLine);
foreach (string kbaid2 in update2.BundledUpdates)
{
string kbNo = GetKBNo(update2.Title.ToLower());
txtAllUpdates.AppendText("\t\t" + kbNo);
}
}
我还尝试查看更新历史记录,但这为我提供了另一组数据 - 仍然不完整!
UpdateSession updateSession = new UpdateSession();
IUpdateSearcher updateSearcher = updateSession.CreateUpdateSearcher();
int count = updateSearcher.GetTotalHistoryCount();
MessageBox.Show("Total Count = " + count);
IUpdateHistoryEntryCollection history = updateSearcher.QueryHistory(0, count);
for (int i = 0; i < count; ++i)
{
txtAllUpdates.AppendText("\t\t\t" + history[i].Title);
}
我还检查了一些利用注册表的代码,但从我读过的内容来看,这不是正确的做事方式。在这一点上,我正在执行许多不同的查询,搜索“KB”引用的条目并构建一个列表并删除重复项,但我仍然没有得到我在屏幕上看到的相同列表!即使这确实有效,也可能不是正确的方法——我觉得我一定错过了一些东西。
最后,我试图获取有关上次检查和安装更新的时间的信息——即使这与显示的内容不匹配。我用下面的代码做到了这一点;
var auc = new AutomaticUpdatesClass();
DateTime? lastInstallationSuccessDateUtc = null;
if (auc.Results.LastInstallationSuccessDate is DateTime)
lastInstallationSuccessDateUtc = new DateTime(((DateTime)auc.Results.LastInstallationSuccessDate).Ticks, DateTimeKind.Utc);
DateTime? lastSearchSuccessDateUtc = null;
if (auc.Results.LastSearchSuccessDate is DateTime)
lastSearchSuccessDateUtc = new DateTime(((DateTime)auc.Results.LastSearchSuccessDate).Ticks, DateTimeKind.Utc);
lblInstall.Text += lastInstallationSuccessDateUtc.ToString();
lblSearch.Text += lastSearchSuccessDateUtc.ToString();
有没有人在这方面有一些专业知识?真的很想把这件事做好!
感谢您花时间阅读!
尊敬的,马歇尔