mit ShellExecute weis ich keine Lösung, aber mit CreateMutex an dein Hauptprogramm kann eine Möglichkeit sein
Delphi-Quellcode:
hMutex := CreateMutex( nil, false, 'meinHauptprogramm VX.XX');
if WaitForSingleObject( hMutex, 50 ) = WAIT_TIMEOUT then begin
SendMessage( HWND_BROADCAST, WM_MUTEX, 77501, 999501 );
Application.Terminate;
end;