Determining a File’s Associated Application

FindAssociatedApplication returns the path to the executable associated with the file passed to the function. An exception is thrown if an error occurs:

Imports System.Text

Private Declare Auto Function FindExecutable Lib "shell32.dll" ( _
    ByVal lpFile As String, _
    ByVal lpDirectory As String, _
    ByVal lpResult As StringBuilder _
) As Int32

Private Const SE_ERR_FNF As Int32 = 2
Private Const SE_ERR_NOASSOC As Int32 = 31
Private Const SE_ERR_OOM As Int32 = 8

Private Const MAX_PATH As Int32 = 260

Private Function FindAssociatedApplication( _
    ByVal FileName As String _
) As String
    Dim sb As New StringBuilder(MAX_PATH)
    Dim n As Int32 = FindExecutable(FileName, vbNullString, sb)
    If n > 32 Then
        Return sb.ToString()
        Dim s As String = "Unknown error."
        Select Case n
            Case SE_ERR_FNF
                s = "File not found."
            Case SE_ERR_NOASSOC
                s = "No file association found."
            Case SE_ERR_OOM     ' Since Windows XP.
                s = "Out of memory."
        End Select
        Throw New Exception(s)
    End If
End Function


Catch ex As Exception
End Try

FindExecutable is used for documents, to find the path of an executable file, AssocQueryString can be used.