Inno Setup-防止同时执行多次安装程序

武志

我在使用Inno Setup时遇到了麻烦:在用户计算机上,我的安装程序运行缓慢(我尚未诊断出的问题,可能是该计算机特有的问题,我仍然不知道)。这导致该用户在第一个实例仍在执行时再次运行安装程序-令我惊讶的是,他们似乎都运行了一段时间,然后崩溃并烧毁...

我四处搜寻,但没有找到任何禁用此行为的方法-我的大多数查询都涉及Inno Setup互斥功能,这并不是我真正想要的。任何人都获得有关如何确保安装程序仅执行一个实例/进程的提示?谢谢!

TLama

从Inno Setup 5.5.6开始,您可以使用以下SetupMutex指令:

[Setup]
AppId=MyProgram
SetupMutex=SetupMutex{#SetupSetting("AppId")}

如果要更改消息文本,该文本在另一个安装程序已在运行时显示,请使用:

[Messages]
SetupAppRunningError=Setup has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit.

在此版本之前,没有内置机制可用。但是您可以简单地编写自己的代码。原则是在安装开始时创建一个唯一的互斥锁。但是,首先,您要检查是否尚未创建这样的互斥体。如果是这样,则退出安装程序;如果不是,则创建互斥体:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Code]
const
  { this needs to be system-wide unique name of the mutex (up to MAX_PATH long), }
  { there is a discussion on this topic http://stackoverflow.com/q/464253/960757 }
  { you can expand here e.g. the AppId directive and add it some 'salt' }
  MySetupMutex = 'My Program Setup 2336BF63-DF20-445F-AAE6-70FD7E2CE1CF';

function InitializeSetup: Boolean;
begin
  { allow the setup to run only if there is no thread owning our mutex (in other }
  { words it means, there's no other instance of this process running), so allow }
  { the setup if there is no such mutex (there is no other instance) }
  Result := not CheckForMutexes(MySetupMutex);
  { if this is the only instance of the setup, create our mutex }
  if Result then
    CreateMutex(MySetupMutex)
  { otherwise tell the user the setup will exit }
  else
    MsgBox('Another instance is running. Setup will exit.', mbError, MB_OK);
end;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从Inno Setup安装JRE?

来自分类Dev

Inno Setup:仅在非常安静时安装

来自分类Dev

Inno Setup .net Framework自动安装程序问题

来自分类Dev

如何从Inno Setup安装程序设置全局环境变量?

来自分类Dev

Inno Setup-用于多个安装程序的安装程序

来自分类Dev

Inno Setup“安装完成”向导页面

来自分类Dev

在Inno Setup中取消安装

来自分类Dev

Inno Setup禁用安装向导页面

来自分类Dev

Inno Setup:/ verysilent安装后如何自动运行程序?

来自分类Dev

Microsoft SmartScreen-使用Inno Setup安装程序已暂停?

来自分类Dev

如何在Inno Setup中最小化安装程序?

来自分类Dev

Inno Setup-如何安装Windows Update脱机安装程序

来自分类Dev

Inno Setup在安装程序中指定日志名称

来自分类Dev

Inno Setup-AfterInstall操作执行了多次

来自分类Dev

Inno Setup:在卸载过程中从安装程序读取文件

来自分类Dev

从Inno Setup执行带有输出重定向的程序

来自分类Dev

卸载程序中的Inno Setup脚本常量

来自分类Dev

根据在线文件设置Inno Setup安装程序版本

来自分类Dev

使用Inno Setup为Python创建Windows安装程序

来自分类Dev

自动更新Inno Setup程序

来自分类Dev

Inno Setup:仅在不静音时安装

来自分类Dev

Inno Setup-用于多个安装程序的安装程序

来自分类Dev

Inno Setup“安装完成”向导页面

来自分类Dev

Inno Setup禁用安装向导页面

来自分类Dev

Inno Setup-防止安装程序添加注册表项并包含在程序/功能中

来自分类Dev

Inno Setup卸载程序在哪里可执行?

来自分类Dev

使用Inno Setup创建透明的安装程序?

来自分类Dev

使用 Inno Setup 安装程序安装 Windows shell 扩展 DLL

来自分类Dev

使用 Inno Setup 显示安装期间执行的操作列表

Related 相关文章

热门标签

归档