Hi Larry,
Thanks for the information.  I google this issue and found some different approaches, I combined two of them and was able to put together a solution that will will do just what is expected from the user: if the application is minimized, it will just bring it to the from.
Of course this solution is not as simple as using the Mutex and may have other issues since it uses the System.Diagnostics.Process to get to the application.
Ok here is the code.. Copy these 2 classes to a new class file in the main project I called mine "SingleInstance.vb"  or if you have a based class in the main .exe project you could use that as well.
#Region " Code to handle a single instance of the application "
    'Windows API
    Declare Function OpenIcon Lib "user32" (ByVal hwnd As Long) As Long
    Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
    ''' 
    ''' Function to check and see if an instance of the application is already open
    '''     ''' 
Name of the application
    ''' 
True/False    ''' 
    Public Shared Function IsAlreadyOpen(ByVal sApp As String) As Boolean
        'Check running processes to see if application is already running
        Dim pProcess As Process() = System.Diagnostics.Process.GetProcessesByName(sApp)
        If pProcess.Length > 1 Then  'If > 1 then its already running
            Return True
        Else  'Not running
            Return False
        End If
    End Function
    Public Shared Sub ActivatePrevInstance(ByVal argStrAppToFind As String)
        Dim PrevHndl As Long
        Dim result As Long
        Dim objProcess As New Process 'Variable to hold individual Process
        Dim objProcesses() As Process 'Collection of all the Processes running on local machine
        objProcesses = Process.GetProcesses() ''Get all processes into the collection
        For Each objProcess In objProcesses
            If UCase(objProcess.ProcessName) = UCase(argStrAppToFind) Then
                If Not String.IsNullOrEmpty(objProcess.MainWindowTitle) Then
                    'MessageBox.Show(objProcess.MainWindowTitle)
                    PrevHndl = objProcess.MainWindowHandle.ToInt32()
                    Exit For
                End If
            End If
        Next
        If PrevHndl = 0 Then Exit Sub 'if No previous instance found exit the application.
        ''If found
        result = OpenIcon(PrevHndl) 'Restore the program.
        result = SetForegroundWindow(PrevHndl) 'Activate the application.
        End 'End the current instance of the application.
    End Sub
#End Region
Now like in your case, to execute it in the AppMain.vb after the "Public Shared Sub Main()" add this code:
If SingleInstance.IsAlreadyOpen(My.Application.Info.ProductName) Then
            SingleInstance.ActivatePrevInstance(My.Application.Info.ProductName)
            Exit Sub
 End If
                
			            				
			            Edhy Rijo