innosetup 安装前判断是否有进程正在运行

[Code]

//安装前判断是否有进程正在运行,istask.dll文件与打包的exe文件一起
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
  Result:= true;
  if RunTask('{#MyAppExeName}', false) then
      begin
           if MsgBox('安装程序检测到 {#MyAppName} 正在运行!'#13''#13'单击“是”按钮关闭程序并继续安装;'#13''#13'单击“否”按钮退出安装!', mbConfirmation, MB_YESNO) = IDYES then
              begin
              KillTask('{#MyAppExeName}');
              Result:= true;
              end
           else
              Result:= false;
      end
  else Result:= true;
end;

 

// 卸载前判断进程是否在运行
function RunTaskU(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@{app}/ISTask.dll stdcall delayload uninstallonly';
function KillTaskU(ExeFileName: string): Integer;
  external 'KillTask@{app}/ISTask.dll stdcall delayload uninstallonly';

function InitializeUninstall(): Boolean;
  begin
    Result:= true;
    if RunTaskU('{#MyAppExeName}', false) then
      begin
        if MsgBox('卸载程序检测到 {#MyAppName} 正在运行!'#13''#13'单击“是”按钮关闭程序并继续卸载;'#13''#13'单击“否”按钮退出卸载!', mbConfirmation, MB_YESNO) = IDYES then
          begin
            KillTaskU('{#MyAppExeName}');
            Result:= true;
          end
        else
          Result:= false;
      end
    else
    Result:= true;
    UnloadDll(ExpandConstant('{app}/ISTask.dll'));

  end;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Inno Setup可以使用Pascal脚本语言中的`CheckForMutexes`函数来检查指定的互斥对象是否已经被创建,从而判断某个进程是否正在运行。 下面是一个示例代码: ```pascal [Code] function CheckForMutexes(Mutexes: array of String): Boolean; var I: Integer; MutexHandle: THandle; begin Result := False; for I := 0 to High(Mutexes) do begin MutexHandle := CreateMutex(nil, True, PChar(Mutexes[I])); if MutexHandle <> 0 then begin if GetLastError = ERROR_ALREADY_EXISTS then begin Result := True; CloseHandle(MutexHandle); Exit; end; end; end; end; ``` 在上面的代码中,`CheckForMutexes`函数接收一个字符串数组`Mutexes`作为参数,每个字符串代表一个互斥对象。函数会逐个创建互斥对象,如果创建成功且错误码为`ERROR_ALREADY_EXISTS`,则说明该互斥对象已经存在,即某个进程正在使用该互斥对象,函数返回`True`。 在安装程序中,可以在`InitializeSetup`函数中调用`CheckForMutexes`函数来检查某个进程是否正在运行,如果返回`True`则说明该进程正在运行安装程序可以选择终止安装或者提示用户关闭该进程后再继续安装。例如: ```pascal function InitializeSetup(): Boolean; begin if CheckForMutexes(['MyAppMutex']) then begin MsgBox('MyApp is already running. Please close it before installing.', mbError, MB_OK); Result := False; Exit; end; Result := True; end; ``` 在上面的代码中,如果`CheckForMutexes(['MyAppMutex'])`返回`True`,则会弹出一个错误提示框,提示用户关闭`MyApp`后再继续安装。如果返回`False`,则安装程序可以继续执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值