在脚本的开头,我有以下几行代码:
#define ISSI_Splash "C:\InnoSetupProject\Images\client.bmp"
#define ISSI_Splash_T 3
#define ISSI_Splash_X 500
#define ISSI_Splash_Y 220在我的[Setup]部分中,我添加了以下指令:
AppMutex=ABClientLaunchMutex然后在[Code]部分中创建互斥对象:
[Code]
function ISSI_InitializeSetup : Boolean;
begin
Result := True;
CreateMutex('ABClientLaunchMutex');
end;
#define ISSI_InitializeSetup这两行代码位于脚本的末尾:
#define ISSI_IncludePath "C:\ISSI"
#include ISSI_IncludePath+"\_issi.isi"但这并不像人们所期望的那样有效。每当我启动安装程序时,它都会立即显示互斥锁的消息,即我的应用程序已经在运行,但这不是真的。我还没有在全局命名空间中创建互斥对象,所以我不需要使用Global\前缀。如果我在开始时注释这4个#define指令,那么互斥就根本不起作用。
你能告诉我我的代码出了什么问题吗?
发布于 2020-03-31 16:39:10
如果希望阻止安装程序在我的应用程序已经安装和启动时运行,
和我需要使用AppMutex。
我认为您的错误是,当应用程序应该这样做时,您正在安装脚本本身中创建互斥对象。
我的脚本中只有AppMutex一次一次:
[setup]
AppMutex=xxxyyyzzz如文件所述:
使用此指令需要将代码添加到应用程序中,这将创建一个互斥体,其名称为本指令中指定的名称。
文档提供了示例。下面是我如何使用项目来完成这个任务:
BOOL CMeetingScheduleAssistantApp::InitInstance()
{
CString strMutex;
stMutex.LoadString(IDS_APP_MUTEX);
m_hMutex = ::CreateMutex(nullptr, FALSE, strMutex);
...
...
}https://stackoverflow.com/questions/60951967
复制相似问题