Lo suyo es que la propia app implementase en código ese control comprobando si ya hay una instancia previa en ejecución. Podrías hacer que el acceso directo a esa app1, en vez de apuntar directamente a ella, llamase a una app2 o script que compruebe si está en ejecución la app1 (se recorren los procs en ejecución y se comparan con el que te interesa). Si no está en ejecución, se lanza el proceso.
Posible ejemplo script vbs
exe = "app.exe" 'nombre del exe a comprobar
Set WMI = GetObject("winmgmts:\\.\root\cimv2")
Set Proc = WMI.execquery("select * from win32_process", , 48)
For Each p2 In Proc
If LCase(p2.Name) = LCase(exe) Then
'en ejecución
wScript.Quit
End If
Next
'no está en ejecución
Set owsh = CreateObject("WScript.Shell")
owsh.Run exe '(indicar ruta completa si no está en el path del sistema)
Set owsh = Nothing