Provo a dare una soluzione.

Inserisci nel programma un controllo che non sia già in esecuzione:

codice:
        Dim LRet as String
        LRet = Process.GetCurrentProcess.ProcessName
        If Process.GetProcessesByName(LRet).GetUpperBound(0) > 0 Then
            MsgBox("Applicazione già in uso!")
            Application.ExitThread()
            Application.Exit()
            End
        End If
Dopo i tentativi falliti chiudi l'applicazione solo dopo un ceerto periodo:

codice:
Me.hide()
Thread.Sleep(60000)
Application.Exit()
Me.hide potresti anche non metterlo, ma il form si vedrebbe per un po' di tempo...

L'unico inconveniente è che se si blocca l'applicazione in qualche modo non visibile quella nuova non riparte più, ma devi killare quella vecchia...

Fai tu