Inno-Setup-合并返回布尔值的事件函数的实现(如InitializeSetup)



我使用以下代码来请求密码:Inno设置-将密码页面移动到欢迎页面(第一页)之前

自定义语言选择器的代码:
Inno Setup-具有VCL样式的语言选择器

当我合并它们时,它不起作用。

我需要密码之前,语言选择器,所以这是不正确的:

function InitializeSetup(): Boolean;
var
Language: string;
begin
Result := True;
Language := ExpandConstant('{param:LANG}');
if Language = '' then
begin
Log('No language specified, showing language dialog');
SelectLanguage();
Result := False;
Exit;
end
else
begin
Log('Language specified, proceeding with installation');
Result := AskPassword();
end;
end;

这样,如果密码不正确,安装程序就会继续。

function InitializeSetup(): Boolean;
var
Language: string;
begin
Result := True;
Language := ExpandConstant('{param:LANG}');
if Language = '' then
begin
Result := AskPassword();
Log('No language specified, showing language dialog');
SelectLanguage();
Result := False;
Exit;
end
else
begin
Log('Language specified, proceeding with installation');
end;
end; 

Inno Setup 6

Inno Setup 6具有事件属性功能,有助于解决此问题。

只需确保每个事件实现都有一个唯一的名称,例如添加唯一的后缀。并添加具有已实现事件名称的event属性。

[Code]
function InitializeSetup(): Boolean;
begin
Result := ...
end;
<event('InitializeSetup')>
function InitializeSetup2(): Boolean;
begin
Result := ...
end;

创新设置5

通常,最简单的方法是将事件函数的两个实现分开,并添加一个同时调用这两个实现的包装器实现。

function InitializeSetup1(): Boolean;
var
Language: string;
begin
Result := True;
Language := ExpandConstant('{param:LANG}');
if Language = '' then
begin
Log('No language specified, showing language dialog');
SelectLanguage();
Result := False;
Exit;
end
else
begin
Log('Language specified, proceeding with installation');
Result := True;
end;
end;
function InitializeSetup2(): Boolean;
begin
Result := AskPassword();
end;
function InitializeSetup(): Boolean;
begin
{ Order the calls the way you want the checks to be performed }
Result :=
InitializeSetup2() and
InitializeSetup1();
end;

有关该问题的更多一般性讨论,请参阅
合并来自不同来源的事件函数(InitializeWizard)实现


尽管在您的特定情况下,这更为复杂,因为您还需要将密码从第一个实例传递到另一个实例,类似于语言从第一个例子传递到其他实例的方式。

因此,实际上,InitializeSetup2(密码)实现必须与InitializeSetup1(语言)类似,而不是再次要求密码。

事实上,我真的不明白,为什么你在密码前不要求语言,让事情变得如此复杂。这实际上是有道理的。获取本地化的密码提示。

最新更新