Si vous avez le contrôle sur l'application (comme le laisse entendre de votre question), une belle façon de le faire est de créer un objet de mappage de fichier nommé au début du processus commence. Ceci est similaire à la suggestion de créer un mutex à partir 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;
Consultez le MSDN documentation on CreateFileMapping pour plus de détails.
Voir également la réponse acceptée à this question qui couvre la réponse de Luke et fournit des solutions supplémentaires.