检查应用程序是否正在运行

问题描述:

我正在使用innosetup为我的Windows应用程序创建安装。在开始安装之前,我需要检查应用程序是否已经运行。我用了下面的代码,这是不正常工作。检查应用程序是否正在运行

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; 

这里winHwnd总是为0.请让我知道这段代码有什么问题。

感谢, 馒头

InnoSetup有一个内置的检查,看看您的应用程序正在运行,看在[Setup]部分AppMutex设置。您只需在应用程序中创建一个已命名的互斥体,然后在innosetup脚本中指定该互斥体的名称即可。然后InnoSetup将执行检查并显示一条消息。

+0

感谢您的快速回复。我的windows应用程序是在.net中开发的,我不知道如何从我的应用程序创建互斥体。所以我想我会使用FindWindowByWindowName选项。谢谢,Manju – manju 2010-09-03 06:31:00

+0

您也可以在.NET中轻松创建一个命名互斥体请参见http://msdn.microsoft.com/en-us/library/aa332347%28VS.71%29.aspx 使用互斥体对于这种检查,因为命名互斥体也将被发现,如果安装程序运行在不同的会话比你的应用程序(例如,当使用快速用户切换 – Otherside 2010-09-03 06:53:37

+0

谢谢, 它的工作正常 我正在使用互斥体在开始安装前,应用程序是否正在运行我正在安装数据库脚本,如果它成功,我将继续安装应用程序。问题是,我不想在应用程序正在使用时在消息框中显示“取消”。只有“确定”按钮应该显示。有没有办法做到这一点。 谢谢,馒头 – manju 2010-09-03 12:31:47