Grabbed this from a project of mine....
Code:
Dim DotNetFrameworkInfo As New DotNetFramework.SystemInfo
Console.WriteLine(DotNetFrameworkInfo.HighestFrameworkVersion)
Console.WriteLine(DotNetFrameworkInfo.NetFrameworkInstallationPath)
Dim FrameworkVersionCollection As New Collection
FrameworkVersionCollection = DotNetFrameworkInfo.FrameworkVersions
For Each FrameworkVersion As String In FrameworkVersionCollection
Console.WriteLine(FrameworkVersion)
Next
Imports System
Imports System.IO
Imports System.Security
Imports System.Text.RegularExpressions
Namespace DotNetFramework
Public Class SystemInfo
Private Const FRAMEWORK_PATH As String = "\Microsoft.NET\Framework"
Private Const WINDIR1 As String = "windir"
Private Const WINDIR2 As String = "SystemRoot"
Private _versions As New Collection
Public ReadOnly Property FrameworkVersions() As Collection
Get
Try
GetVersions(NetFrameworkInstallationPath)
Catch e1 As SecurityException
Return Nothing
End Try
Return _versions
End Get
End Property
Public ReadOnly Property HighestFrameworkVersion() As String
Get
Try
Return GetHighestVersion(NetFrameworkInstallationPath)
Catch e1 As SecurityException
Return "Unknown"
End Try
End Get
End Property
Private Sub GetVersions(ByVal installationPath As String)
Dim versions() As String = Directory.GetDirectories(installationPath, "v*")
Dim VersionNumber As String
_versions.Clear()
For i As Integer = versions.Length - 1 To 0 Step -1
VersionNumber = ExtractVersion(versions(i))
If IsFrameworkVersionFormat(VersionNumber) Then
_versions.Add(VersionNumber)
End If
Next i
End Sub
Private Function GetHighestVersion(ByVal installationPath As String) As String
Dim versions() As String = Directory.GetDirectories(installationPath, "v*")
Dim version As String = "Unknown"
For i As Integer = versions.Length - 1 To 0 Step -1
version = ExtractVersion(versions(i))
If IsFrameworkVersionFormat(version) Then
Return version
End If
Next i
Return version
End Function
Private Function ExtractVersion(ByVal directory As String) As String
Dim startIndex As Integer = directory.LastIndexOf("\") + 2
Return directory.Substring(startIndex, directory.Length - startIndex)
End Function
Private Shared Function IsFrameworkVersionFormat(ByVal str As String) As Boolean
Return New Regex("^[0-9]+\.?[0-9]+\.?[0-9]*$").IsMatch(str)
End Function
Public ReadOnly Property NetFrameworkInstallationPath() As String
Get
Return WindowsPath & FRAMEWORK_PATH
End Get
End Property
Public ReadOnly Property WindowsPath() As String
Get
Dim winDir As String = Environment.GetEnvironmentVariable(WINDIR1)
If String.IsNullOrEmpty(winDir) Then
winDir = Environment.GetEnvironmentVariable(WINDIR2)
End If
Return winDir
End Get
End Property
End Class
End Namespace Modify it to your needs
(...sometimes I outdo myself....)