2017-01-04 9 views
1

я использую этот код, чтобы запрашивать пароль: Inno Setup - Move the password page before the welcome page (first page)Inno Setup - Объединение реализаций функций событий, которые возвращают логическое значение (например, InitializeSetup)

И этот код для выбора пользовательского языка:
Inno Setup - Language selector with VCL Styles

Когда Я сливаю их, это не сработает.

Мне нужен пароль, прежде чем этот селектор языка, так что это не правильно:

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; 
+0

Я действительно не понимаю, почему вы так усложняете вещи, не спрашивая язык перед паролем. На самом деле это имело бы смысл. Чтобы получить подсказку с локализованным паролем. –

ответ

1

В общем, проще всего сохранить обе реализации функции события отдельно и добавить одну реализацию оболочки, которая вызывает оба.

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; 

Для более общего обсуждения проблемы, см
Merging event function (InitializeWizard) implementations from different sources


Хотя в вашем конкретном случае, это более сложно, как вам необходимо будет также передавать пароль от первой инстанции другой, подобно тому, как язык передается от первого экземпляра к другому.

Так что, фактически, реализация InitializeSetup2 (пароль) должна быть такой же, как у InitializeSetup1 (язык), чтобы не запрашивать пароль еще раз.

Я действительно не понимаю, почему вы так усложняете вещи, не спрашивая язык перед паролем. На самом деле это имело бы смысл. Чтобы получить подсказку с локализованным паролем.