使用Inno Setup的AppMutex:在提示之前等待几秒钟

时间:2016-01-29 10:03:26

标签: inno-setup mutex

将Inno Setup和AppMutex一起使用可以正常工作 - 当设置启动并且互斥锁仍然退出时,系统会提示用户关闭此应用程序。

但是以下问题: 有没有办法告诉Inno安装程序在显示用户此提示之前程序自行关闭2-3秒?

原因是我从程序本身运行Inno Setup以进行自动更新。在执行安装文件之后,程序直接关闭,但显然需要太长时间(至少在某些系统上)。因此,Inno Setup会向用户显示这个 - 在这种情况下 - 无用的对话框,尽管程序已经关闭了。

因此,我想要完成Inno Setup等待2-3秒,并且只有在该时间之后互斥锁仍然存在时,它才会向用户显示提示。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:2)

根据此要求,您无法使用内置AppMutex directive

您必须使用CheckForMutexes function

自行实施互斥检查
[Code]

const
  MutexName = 'MutexName';

function InitializeSetup: Boolean;
var
  WaitInterval: Integer;
  Wait: Integer;
begin
  Wait := 3000;

  WaitInterval := 250;
  while (Wait > 0) and CheckForMutexes(MutexName) do
  begin
    Log('Application is still running, waiting');
    Sleep(WaitInterval);
    Wait := Wait - WaitInterval;
  end;

  while CheckForMutexes(MutexName) do
  begin
    if MsgBox(
         FmtMessage(SetupMessage(msgSetupAppRunningError), ['MyApplication']),
         mbError, MB_OKCANCEL) <> IDOK then
    begin
      Abort;
    end;
  end;

  Result := True;
end;