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 Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?