首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这些代码不能像在Inno安装程序中那样工作呢?

为什么这些代码不能像在Inno安装程序中那样工作呢?
EN

Stack Overflow用户
提问于 2020-03-31 13:39:05
回答 1查看 202关注 0票数 0

在脚本的开头,我有以下几行代码:

代码语言:javascript
复制
#define ISSI_Splash "C:\InnoSetupProject\Images\client.bmp"                    
#define ISSI_Splash_T 3                                                                         
#define ISSI_Splash_X 500                                                                       
#define ISSI_Splash_Y 220

在我的[Setup]部分中,我添加了以下指令:

代码语言:javascript
复制
AppMutex=ABClientLaunchMutex

然后在[Code]部分中创建互斥对象:

代码语言:javascript
复制
[Code]
function ISSI_InitializeSetup : Boolean;
begin
  Result := True;
  CreateMutex('ABClientLaunchMutex');
end;

#define ISSI_InitializeSetup

这两行代码位于脚本的末尾:

代码语言:javascript
复制
#define ISSI_IncludePath "C:\ISSI" 
#include ISSI_IncludePath+"\_issi.isi"

但这并不像人们所期望的那样有效。每当我启动安装程序时,它都会立即显示互斥锁的消息,即我的应用程序已经在运行,但这不是真的。我还没有在全局命名空间中创建互斥对象,所以我不需要使用Global\前缀。如果我在开始时注释这4个#define指令,那么互斥就根本不起作用。

你能告诉我我的代码出了什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-31 16:39:10

如果希望阻止安装程序在我的应用程序已经安装和启动时运行,

和我需要使用AppMutex。

我认为您的错误是,当应用程序应该这样做时,您正在安装脚本本身中创建互斥对象。

我的脚本中只有AppMutex一次一次

代码语言:javascript
复制
[setup]
AppMutex=xxxyyyzzz

如文件所述:

使用此指令需要将代码添加到应用程序中,这将创建一个互斥体,其名称为本指令中指定的名称。

文档提供了示例。下面是我如何使用项目来完成这个任务:

代码语言:javascript
复制
BOOL CMeetingScheduleAssistantApp::InitInstance()
{
    CString strMutex;

    stMutex.LoadString(IDS_APP_MUTEX);

    m_hMutex = ::CreateMutex(nullptr, FALSE, strMutex);

    ...
    ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60951967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档