Io ho risolto lo stesso problema usando la FindWindow() inserendola nel sorgente principale.
program .....
uses ......
const
ProgName = 'Nome etichetta del form principale';
ClassProg='Nome classe del form principale';
var
MyProg: THandle;
Myprog := FindWindow(ClassProg, ProgName) ; //Cerca l'handle dell'applicazione
If MyProg <> 0 Then //impedisce che l'applicazione venga avviata più volte
begin
Application.MessageBox('Applicazione già avviata.... ', ProgName, MB_OK + MB_ICONINFORMATION);
Application.Terminate;
end else begin
//inserire qui il restante codice per l'inizializzazione dell'applicazione
.....
....