Private Sub CheckExtensions()
Dim extensions As String() = {".txt", ".dwg", ".doc", ".sln", ".gif", ".fake"}
Dim exePath As String = String.Empty
For Each extension In extensions
Select Case Me.GetExecutablePath(extension, exePath)
Case ExecutablePathResults.ExtensionNotFound
MessageBox.Show("The named extension does not exist or a file association does not exist.", extension)
Case ExecutablePathResults.Success
MessageBox.Show(exePath, extension)
Case ExecutablePathResults.UnexpectedKeyStructure
MessageBox.Show("The expected key structure was incorrect.", extension)
Case ExecutablePathResults.ExtensionDoesNotNameAType
MessageBox.Show("Extension does not name a file classification.", extension)
Case ExecutablePathResults.ExpectedExePathIsBlank
MessageBox.Show("The expected exe path is blank.", extension)
End Select
Next
End Sub
Public Function GetExecutablePath(ByVal extension As String, ByRef result As String) As ExecutablePathResults
Dim defaultKey As Microsoft.Win32.RegistryKey = _
My.Computer.Registry.ClassesRoot.OpenSubKey(extension, False)
Dim defaultValue As String = String.Empty
If defaultKey IsNot Nothing Then
defaultValue = defaultKey.GetValue(String.Empty, String.Empty).ToString()
Else
Return ExecutablePathResults.ExtensionNotFound
End If
If defaultValue <> String.Empty Then
Dim resultKey As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot _
.OpenSubKey(String.Format("{0}\shell\open\command", _
defaultValue))
If resultKey IsNot Nothing Then
result = resultKey.GetValue(String.Empty, String.Empty).ToString()
If result = String.Empty Then
Return ExecutablePathResults.ExpectedExePathIsBlank
Else
result = System.Text.RegularExpressions.Regex.Match(result, _
"[A-Za-z]{1}:[^%""]+").Value
End If
Return ExecutablePathResults.Success
Else
Return ExecutablePathResults.UnexpectedKeyStructure
End If
Else
Return ExecutablePathResults.ExtensionDoesNotNameAType
End If
End Function
Public Enum ExecutablePathResults
Success = 0
ExtensionNotFound = 1
UnexpectedKeyStructure = 2
ExtensionDoesNotNameAType = 3
ExpectedExePathIsBlank = 4
End Enum