Utilisation de Mutex pour tuer un processus
Bonjour,
Je travail sur un programme qui doit tuer les autres instances de lui-même lorsqu’il se lance. Le programme doit être lancé en tâche planifiée. Et je veux que si jamais il se plante, le fait que la tâche planifiée le relance, cela provoque le tuage de l’ancienne instance.
Pour l’instant mode code ressemble à ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const
WM_CLOSE = $0010;
var
HandleProg: HWND;
iErreur: Integer;
begin
SetLastError(NO_ERROR);
HandleProg := CreateMutex(nil, False, '{A3826744-3202-4602-9BA0-D722161D5C9D}');
iErreur := GetLastError();
// Si l'application est déjà lancée, on la ferme
if iErreur in [ERROR_ALREADY_EXISTS, ERROR_ACCESS_DENIED] then
KillProcess(ExtractFileName(Application.ExeName));
Application.Initialize;
// ... |
Mais je ne suis pas sûr que d’utiliser la méthode KillProcess de l’API Windows soit fiable. Si jamais mon programme est renommé, ou si un programme à le même nom…
Quelqu’un aurait une autre idée ?