Installiertes .NET Framework Service Pack ermitteln

Veröffentlicht: 11. Okt 2004 | Aktualisiert: 14. Nov 2004

Von Mathias Schiffer

In diesem MSDN Quickie lesen Sie, wie sie auf einem Zielsystem die Version des installierten .NET Frameworks feststellen und dabei auch das installierte Service Pack berücksichtigen.

Das .NET Framework bietet selbst eine ganz einfache Möglichkeit zur Ausgabe der kompletten Versionsnummer:

Console.WriteLine("Sie verwenden .NET Framework Version {0}", _
       System.Environment.Version.ToString)

Damit haben Sie alle - auch einzeln abfragbaren - Informationen zur Versionsnummer zur Hand: Hauptversionsnummer (.Major), Nebenversionsnummer (.Minor), Revisionsnummer (.Revision) und schließlich noch die Buildnummer (.Build) stehen Ihnen zur Verfügung.

Möchten Sie aber wissen, welches Service Pack für das aktuelle .NET Framework installiert ist, bleibt Ihnen diese Information auf diesem Wege verschlossen. Natürlich könnten Sie eine Tabelle der bereits bekannten Versionsnummern für Framework-Versionen und zugehörige Service Packs zusammenstellen. Doch spätestens beim nächsten Release würde sich dieser Ansatz schon nicht mehr voll eignen.

Dabei ist in der Windows Registrierungsdatenbank durchaus die Nummer des installierten Service Packs für die jeweilige .NET Runtime vermerkt: Sie versteckt sich als DWORD-Zahlenwert im Zweig HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v[Version]\SP, wobei [Version] hier symbolisch die jeweilige Versionsnummer in der Notation Major.Minor.Build angibt.

Stellen Sie daher die benötigte Versionsinformation mithilfe von System.Environment.Version zusammen und lesen den passenden Registry-Zweig aus. Damit steht Ihnen eine zukunftssichere Möglichkeit zur Verfügung, von Ihrem Sourcecode aus das installierte .NET Framework Service Pack-Level einer Zielmaschine zu bestimmen.

Die folgende Routine GetServicePackNumber erledigt die Aufgabe für Sie:

Private Function GetServicePackNumber() As Integer
    ' Gibt die Nummer des Service Packs des aktuell verwendeten
    ' .NET Frameworks zurück. oder 0, wenn kein Service Pack
    ' installiert ist.
  
    ' Die Information über die Service Pack-Nummer steht in der
    ' Windows Registry unter
    ' HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v[Version]\,
    ' mit [Version] als Versionsnummer des .NET Frameworks ohne Revisionsanteil.
    Dim strKeyName As String
    Dim ServicePack As Object
  
    ' Die aktuelle Framework-Versionsnummer ist abfragbar über
    ' System.Environment.Version.ToString, hierbei wird jedoch
    ' auch der Revisionsteil mit angegeben. Daher wird auf die
    ' einzelnen Komponenten zurückgegriffen:
    With System.Environment.Version
      strKeyName = "v" & _
                   .Major.ToString & "." & _
                   .Minor.ToString & "." & _
                   .Build.ToString
    End With
  
    ' Registry-Wert für das Service Pack abholen
    ServicePack = Microsoft.Win32.Registry.LocalMachine.OpenSubKey( _
                         "Software\Microsoft\NET Framework Setup\NDP\" & strKeyName _
                         ).GetValue("SP")
  
    ' Wert als Integer zurückgeben
    Return CType(ServicePack, Integer)
  
  End Function