使用Inno安装程序和一个AppMutex可以很好地工作-当安装启动并且互斥仍然存在时,提示用户关闭这个应用程序。
但以下问题:是否有方法告诉Inno安装程序等待2-3秒,如果程序关闭之前,向用户显示此提示?
原因是,为了自动更新,我从程序本身运行Inno安装程序。安装文件执行后,程序直接关闭,但很明显,这需要太长时间(至少在某些系统上是这样)。因此,虽然程序已经关闭,但Inno安装程序在这种情况下向用户显示了这个无用的对话框。
因此,我希望完成Inno安装程序等待2-3秒,并且只有当互斥锁在该时间之后仍然存在时,它才会向用户显示提示。
有办法做到这一点吗?
发布于 2016-01-29 15:44:35
有了这样的需求,您就不能使用内置的 directive。
您必须在循环中使用 function实现互斥体检查,就像在your previous question中建议的那样。
[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;https://stackoverflow.com/questions/35081681
复制相似问题