2010-09-03 5 views
0

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

Répondre

1

InnoSetup a un contrôle pour voir intégré si votre application est en cours d'exécution, regardez le réglage AppMutex dans la section [Setup]. Tout ce que vous devez faire est de créer un mutex nommé dans votre application, et spécifiez le nom de ce mutex dans votre script innosetup. InnoSetup effectuera ensuite la vérification et affichera un message lui-même.

+0

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

+0

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

+0

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

Questions connexes