Определение установленных обновлений .NET Framework программным путём

Информация об установленных обновлениях каждой версии .NET Framework хранится в реестре Windows. Для просмотра этих данных можно использовать обычный редактор реестра regedit.

Открываем раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates, сведения о обновлениях лежат в подразделах с именами, соответствующими названиям версий .NET Framework.

Редактор реестра с открытой веткой установленных обновлений .Net Framework

Каждое обновление идентифицируется по номеру в базе знаний Microsoft (KB — Knowledge Base). Посмотреть подробные сведения о конкретном обновлении, можно подставив его номер в адрес вида http://support.microsoft.com/kb/999999.

Важно! Обновления версий .NET, которые являются компонентами системы, в данной ветке не выводятся! Узнать, какие версии идут в комплекте с операционной системой можно здесь.

Пример кода на C#, выводящего в консоль установленные обновления

высшим образованием. The working capital ratio is Working Capital Ratio = Current Assets / Current Liabilities.

using System;
using Microsoft.Win32;

public class NetUpdateHistory
{
	public static void Main()
	{
		using (RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(@"SOFTWARE\Microsoft\Updates"))
		{
			foreach (string baseKeyName in baseKey.GetSubKeyNames())
			{
				if (baseKeyName.Contains(".NET Framework") || baseKeyName.StartsWith("KB") || baseKeyName.Contains(".NETFramework"))
				{
					using (RegistryKey updateKey = baseKey.OpenSubKey(baseKeyName))
					{
						string name = (string)updateKey.GetValue("PackageName", "");
						Console.WriteLine(baseKeyName + "  " + name);

						foreach (string kbKeyName in updateKey.GetSubKeyNames())
						{
							using (RegistryKey kbKey = updateKey.OpenSubKey(kbKeyName))
							{
								name = (string)kbKey.GetValue("PackageName", "");
								Console.WriteLine("    " + kbKeyName + "  " + name);

								if (kbKey.SubKeyCount > 0)
								{
									foreach (string sbKeyName in kbKey.GetSubKeyNames())
									{
										using (RegistryKey sbSubKey = kbKey.OpenSubKey(sbKeyName))
										{
											name = (string)sbSubKey.GetValue("PackageName", "");

											if (name == "")
												name = (string)sbSubKey.GetValue("Description", "");

											Console.WriteLine("        " + sbKeyName + "  " + name);
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

Данная программа выдаст примерно такой результат.

Microsoft .NET Framework 2.0 Service Pack 2
    KB946503  Hotfix for Microsoft .NET Framework 2.0 Service Pack 2 (KB946503)
    KB946644  Hotfix for Microsoft .NET Framework 2.0 Service Pack 2 (KB946644)
    KB946927  Hotfix for Microsoft .NET Framework 2.0 Service Pack 2 (KB946927)
    KB947148  Hotfix for Microsoft .NET Framework 2.0 Service Pack 2 (KB947148)
    SP1
        KB946102  Hotfix for Microsoft .NET Framework 2.0 Service Pack 2 (KB946102)
        KB946457  Hotfix for Microsoft .NET Framework 2.0 Service Pack 2 (KB946457)
        KB946573  Hotfix for Microsoft .NET Framework 2.0 Service Pack 2 (KB946573)
        KB948233v2  Hotfix for Microsoft .NET Framework 2.0 Service Pack 2 (KB948233)
    SP2
        KB2418241  Security Update for Microsoft .NET Framework 2.0 Service Pack 2 (KB2418241)
        KB2604092  Security Update for Microsoft .NET Framework 2.0 Service Pack 2 (KB2604092)
        KB2656352  Security Update for Microsoft .NET Framework 2.0 Service Pack 2 (KB2656352)
        KB2656369v2  Security Update for Microsoft .NET Framework 2.0 Service Pack 2 (KB2656369v2)
        KB2686828  Security Update for Microsoft .NET Framework 2.0 Service Pack 2 (KB2686828)
Microsoft .NET Framework 3.0 Service Pack 2
    SP2
        KB2604110  Security Update for Microsoft .NET Framework 3.0 Service Pack 1 (KB2604110)
        KB2656407  Security Update for Microsoft .NET Framework 3.0 Service Pack 1 (KB2656407)
Microsoft .NET Framework 3.5 SP1
    KB953595  Hotfix for Microsoft .NET Framework 3.5 SP1 (KB953595)
    SP1
        KB2604111  Security Update for Microsoft .NET Framework 3.5 SP1 (KB2604111)
        KB2657424  Security Update for Microsoft .NET Framework 3.5 SP1 (KB2657424)
Microsoft .NET Framework 4 Client Profile
    KB2461678  Hotfix for Microsoft .NET Framework 4 Client Profile (KB2461678)
    KB2468871  Update for Microsoft .NET Framework 4 Client Profile (KB2468871)
    KB2533523  Update for Microsoft .NET Framework 4 Client Profile (KB2533523)
    KB2600217  Update for Microsoft .NET Framework 4 Client Profile (KB2600217)
    KB2604121  Security Update for Microsoft .NET Framework 4 Client Profile (KB2604121)
Microsoft .NET Framework 4 Extended
    KB2468871  Update for Microsoft .NET Framework 4 Extended (KB2468871)
    KB2487367  Security Update for Microsoft .NET Framework 4 Extended (KB2487367)
    KB2533523  Update for Microsoft .NET Framework 4 Extended (KB2533523)
    KB2600217  Update for Microsoft .NET Framework 4 Extended (KB2600217)
    KB2656351  Security Update for Microsoft .NET Framework 4 Extended (KB2656351)

Материалы по теме