Как получить список установленных обновлений и исправлений?
Список всех обновлений и исправлений, которые были установлены на моем компьютере, либо из Microsoft Windows Update, либо из базы знаний. Мне нужен идентификатор каждого в виде KBxxxxxx или какое-то подобное представление...
В настоящее время у меня есть:
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.
Ответы
Ответ 1
Вы можете использовать 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
edit: также посмотрите http://msdn.microsoft.com/en-us/library/aa387287%28VS.85%29.aspx
Ответ 2
После дальнейшего поиска того, что я нашел ранее. (Да, так же, как предлагает 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);
Ответ 3
На всякий случай вам просто нужен список обновлений, и вам все равно, получите ли вы его через код или графический интерфейс, вот как это сделать в Powershell:
- Откройте PowerShell (желательно "запустите как admin" )
- Введите "get-hotfix" и нажмите enter. Это он.
![Get hotfixes]()
Ответ 4
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 находится в пакете безопасности, как сказал Том Вейсман и запустил его.
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, который вы ищете, я верю