我想实现运行安装包时,检测到当前软件正在运行就自动退出软件,并继续安装

解决方案 »

  1.   


    [Setup]: AppMutex
    这个指令用于防止用户在应用程序仍在运行的情况下安装新的应用程序版本,以及防止用户卸载正在运行的应用程序。它指定一个或多个已命名互斥中的名字 (多重互斥用逗号隔开),安装程序和卸载程序在启动时检查该名字。如果没有退出,安装程序/卸载程序将显示消息: “[安装程序或卸载程序] 发现 [AppName] 当前正在运行,请现在关闭所有运行中的程序,请先关闭所有运行的窗口,然后单击“确定”继续,或按“取消”退出。”。这个值可以包含常量。使用这个指令需要你添加代码到你的应用程序,这个应用程序是用你在这个指令中指定的名字创建一个互斥的应用程序。下面是在 Delphi、C 和 Visual Basic 创建一个互斥的示例。该代码将在应用程序启动时执行。Delphi:CreateMutex(nil, False, 'MyProgramsMutexName');C:CreateMutex(NULL, FALSE, "MyProgramsMutexName");Visual Basic (由 Peter Young 提交):'放在声明段:
    Private Declare Function CreateMutex Lib "kernel32" _
            Alias "CreateMutexA" _
           (ByVal lpMutexAttributes As Long, _
            ByVal bInitialOwner As Long, _
            ByVal lpName As String) As Long'放在启动代码 (Form_Load 或 Sub Main):
    CreateMutex 0&, 0&, "MyProgramsMutexName"你不需要的你的应用程序终止之后指明退出互斥对象,系统会自动执行。也不推荐你这么做,因为理想的互斥对象应该在进程完成终止后退出。请注意互斥名比较在 Windows 中是区分大小写的。To specify a mutex name containing a comma, escape the comma with a backslash.查阅 MS SDK 帮助中的 CreateMutex 主题获取有关互斥的更多信息。示例:
    AppMutex=MyProgramsMutexName
    看帮助文档
      

  2.   


    function InitializeSetup():Boolean;beginResult := true;HasRun := FindWindowByWindowName('正在运行的程序名');while HasRun<>0 do  begin    if MsgBox('安装程序检测到你的应用程序正在运行。' #13#13 '您必须先关闭它然后单击“是”继续安装,或按“否”退出!', mbConfirmation, MB_YESNO) = idNO then    begin      Result := false;      HasRun := 0;    end    else    begin
          Result := true;      HasRun := FindWindowByWindowName('安装程序名称);    end;  end;end;我现在在inno setup中的[code]段中是这么写的,我想实现点击是的时候自动退出应用程序。
    因为没学过Pascal,实在是看不懂,求代码