Si usted tiene control sobre la aplicación (como se infiere de la pregunta), una buena manera de hacer esto es crear un objeto de asignación de archivo llamado temprano en el proceso comienza. Esto es similar a la sugerencia de crear un mutex de RedLEON.
// Add this into the application you wish to update
CreateFileMapping(HWND($FFFFFFFF), nil, PAGE_READONLY, 0, 32, 'MAIN-PROGRAM');
// Note: Mapping object is destroyed when your application exits
// Add this into your updater application
var
hMapping: HWND;
begin
hMapping := CreateFileMapping(HWND($FFFFFFFF), nil, PAGE_READONLY, 0, 32, 'MAIN-PROGRAM');
if (hMapping <> 0) then
begin
if (GetLastError() = ERROR_ALREADY_EXISTS) then
ShowMessage('Application to update is already running!');
end;
Consulte la MSDN documentation on CreateFileMapping para obtener más información.
Consulte también la respuesta aceptada al this question que cubre la respuesta de Luke y proporciona soluciones adicionales.