Если у вас есть контроль над приложением (как следует из вашего вопроса), хороший способ сделать это - создать именованный объект сопоставления файлов в начале процесса. Это похоже на предложение создать мьютекс из 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;
Дополнительные сведения см. В документации MSDN о CreateFileMapping .
См. Также принятый ответ на этот вопрос , который охватывает ответ Люка и предоставляет дополнительные решения.