Tuer le processus avant (re) installer en utilisant "taskkill / f / im" dans la configuration Inno

j'installe un service/démon, qui doit être tué avant de désinstaller et réinstaller.

j'ai déjà trouvé comment faire pour désinstaller :

[UninstallRun]
Filename: "taskkill"; Parameters: "/im ""My Service.exe"" /f"; Flags: runhidden

la section [Run] , cependant, s'exécute après installation, donc je ne peux pas l'utiliser pour cela. Quelle est la meilleure façon de tuer le processus en utilisant taskkill avant l'installation?

s'il vous plaît noter que je veux spécifiquement tuer le processus. une solution plus complexe utilisant IPC n'offre aucun avantage dans mon cas, je veux juste exécuter taskkill avant d'installer un fichier particulier.

3
demandé sur sashoalm 2015-11-18 12:38:56

2 réponses

j'ai trouvé un moyen d'utiliser le mot-clé BeforeInstall et une simple fonction Pascal dans la section code. J'ai ajouté un paramètre string pour qu'il puisse être réutilisé pour plusieurs processus.

[Files]
Source: "My Service 1.exe"; DestDir: "{app}"; Flags: ignoreversion; BeforeInstall: TaskKill('My Service 1.exe')
Source: "My Service 2.exe"; DestDir: "{app}"; Flags: ignoreversion; BeforeInstall: TaskKill('My Service 2.exe')

[Code]
procedure TaskKill(FileName: String);
var
  ResultCode: Integer;
begin
    Exec(ExpandConstant('taskkill.exe'), '/f /im ' + '"' + FileName + '"', '', SW_HIDE,
     ewWaitUntilTerminated, ResultCode);
end;
15
répondu sashoalm 2015-11-18 09:38:56

sauf si L'installateur tourne sur une machine Windows XP, ou si vous avez paramétré CloseApplications directive à no (la valeur par défaut est yes ), l'installateur doit fermer l'application automatiquement:

enter image description here

la fonctionnalité est disponible depuis Inno Setup 5.5 sous Windows Vista et les versions plus récentes.

7
répondu Martin Prikryl 2018-07-04 09:40:07