J'utilise innosetup pour créer une installation pour mon application Windows. Avant de commencer l'installation, je dois vérifier si l'application est déjà en cours d'exécution ou non. J'ai utilisé le code suivant, qui ne fonctionne pas correctement.Vérifiez si l'application est en cours d'exécution ou non
const
WM_CLOSE = 16;
Function InitializeSetup : Boolean;
var winHwnd: longint;
retVal : boolean;
strProg: string;
begin
Result := true;
try
strProg := 'myApp.exe';
winHwnd := FindWindowByWindowName(strProg);
Log('winHwnd: ' + inttostr(winHwnd));
if winHwnd <> 0 then
retVal:=postmessage(winHwnd,WM_CLOSE,0,0);
if retVal then begin
MsgBox('Window is not running', mbInformation, MB_OK);
Result := True
end
else begin
MsgBox('Window still open', mbInformation, MB_OK);
Result := False;
end;
except
end;
end;
Ici winHwnd est toujours à 0. Veuillez me faire savoir ce qui ne va pas avec ce code.
Merci, Manju
Merci pour la réponse rapide. Mon application Windows est développée en .net, je ne suis pas sûr de savoir comment créer mutex à partir de mon application. Donc je pensais utiliser l'option FindWindowByWindowName. Merci, Manju – manju
Vous pouvez également créer facilement un mutex nommé dans .NET voir http://msdn.microsoft.com/en-us/library/aa332347%28VS.71%29.aspx L'utilisation d'un mutex est également préférable pour ce type de vérification puisque le mutex nommé sera également trouvé si le programme d'installation est exécuté dans une session différente de celle de votre application (par exemple lors de l'utilisation rapide d'un utilisateur) – Otherside
Merci, J'utilise mutex pour voir Si l'application est en cours d'exécution avant de commencer l'installation, j'installe le script de la base de données, si je réussis l'installation de l'application, je ne veux pas que "Annuler" soit affiché dans la boîte de message lorsque l'application est utilisée. Seul le bouton "OK" devrait s'afficher, y a-t-il un moyen de le faire? Merci, Manju – manju