Вопрос Перенос [Types] В [Code]

subbotaaa

Мимокрокодил
Подскажите, пожалуйста. Как перенести выбранный Types в Code?

Например, у меня есть 2 Types

Код:
[Types]
Name: "025"; Description: "Moonloader v0.25 (рекомендуется)"; Flags: iscustom
Name: "026"; Description: "Moonloader v0.26"
При установке выбирается что-то одно. Как мне передать в Code что именно выбрал пользователь (Name), дабы обработать это через if?
 

Andreo Fadio

Старожил
Как перенести выбранный Types в Code?
Можно название к примеру с Combobox'a считать и на основе него условится:
Код:
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[Types]
Name: "025"; Description: "Moonloader v0.25 (рекомендуется)"
Name: "026"; Description: "Moonloader v0.26"

[Components]
Name: "b1"; Description: "Компонент 1"; Types: 026; Flags: exclusive
Name: "b2"; Description: "Компонент 2"; Types: 025; Flags: exclusive

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurpageID = wpReady then
  begin
   if WizardForm.TypesCombo.Text = 'Moonloader v0.25 (рекомендуется)' then
    MsgBox('Ура версия 0.25 :)', mbInformation, MB_OK);
   if WizardForm.TypesCombo.Text = 'Moonloader v0.26' then
    MsgBox('Версия 0.26, печалька ;(', mbError, MB_OK);
  end;
end;

При установке выбирается что-то одно.
Тогда Flags: iscustom лучше убрать, потому что при выборе любого компонента будет выбираться тип с этим флагом
 

subbotaaa

Мимокрокодил
Можно название к примеру с Combobox'a считать и на основе него условится:
Код:
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[Types]
Name: "025"; Description: "Moonloader v0.25 (рекомендуется)"
Name: "026"; Description: "Moonloader v0.26"

[Components]
Name: "b1"; Description: "Компонент 1"; Types: 026; Flags: exclusive
Name: "b2"; Description: "Компонент 2"; Types: 025; Flags: exclusive

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurpageID = wpReady then
  begin
   if WizardForm.TypesCombo.Text = 'Moonloader v0.25 (рекомендуется)' then
    MsgBox('Ура версия 0.25 :)', mbInformation, MB_OK);
   if WizardForm.TypesCombo.Text = 'Moonloader v0.26' then
    MsgBox('Версия 0.26, печалька ;(', mbError, MB_OK);
  end;
end;


Тогда Flags: iscustom лучше убрать, потому что при выборе любого компонента будет выбираться тип с этим флагом
Большое спасибо! Так получилось передать.

Но теперь столкнулся ещё с одной особенностью. Может сможете подсказать как это изменить?

У меня стоит распаковка уже запакованных в установщик файлов, но некоторые он скачивает с сервера.
Выглядит это так:
Код:
[Code]
var FileList: TStringList;

procedure InitializeWizard();
var i: Integer;
begin
    //Downloading file list
    idpDownloadFile('http://ссылка/downloader.txt', ExpandConstant('{tmp}\FileList.txt'));
    
    FileList := TStringList.Create;
    FileList.LoadFromFile(ExpandConstant('{tmp}\FileList.txt'));
    
    for i := 0 to FileList.Count-1 do
        //Add each file to download queque
        idpAddFile('http://ссылка/' + FileList[i], ExpandConstant('{tmp}\') + FileList[i]);
    
    idpDownloadAfter(wpReady);
end;

procedure CurStepChanged(CurStep: TSetupStep);
var i: Integer;
begin
    if CurStep = ssPostInstall then
    begin
        // Copy downloaded files to application directory
        for i := 0 to FileList.Count-1 do
            FileCopy(ExpandConstant('{tmp}\') + FileList[i], ExpandConstant('{app}\moonloader\') + FileList[i], false);
    end;
end;
Установщик загружает список файлов для загрузки, и после его распаковывает.
Но как я понял, этот самый файл для загрузки скачивается перед самой установкой. Я именно в него и хотел поставить разную ссылку от версии, выбранную пользователем.

Я переместил загрузку файлов в CurStepChanged, как я понял это действия после всех распаковок, но в этом случае уже не скачивается или не распаковывается.

Код:
[Code]
var uversion: Integer;
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurpageID = wpReady then
  begin
   if WizardForm.TypesCombo.Text = 'Moonloader v0.25 (рекомендуется)' then
    MsgBox('Ура версия 0.25 :)', mbInformation, MB_OK);
    uversion := 25
   if WizardForm.TypesCombo.Text = 'Moonloader v0.26' then
    MsgBox('Версия 0.26, печалька ;(', mbError, MB_OK);
    uversion := 26
  end;
end;

var FileList: TStringList;

procedure CurStepChanged(CurStep: TSetupStep);
var i: Integer;
begin
        if CurStep = ssPostInstall then
        begin
            if uversion = 25 then
              idpDownloadFile('http://ссылка/downloader25.txt', ExpandConstant('{tmp}\FileList.txt'));
              //MsgBox('Загрузка файлов для 25', mbInformation, MB_OK);
            if uversion = 26 then
              idpDownloadFile('http://ссылка/downloader26.txt', ExpandConstant('{tmp}\FileList.txt'));
              //MsgBox('Загрузка файлов для 26', mbInformation, MB_OK);
            
            FileList := TStringList.Create;
            FileList.LoadFromFile(ExpandConstant('{tmp}\FileList.txt'));
            
            for i := 0 to FileList.Count-1 do
                //Add each file to download queque
                idpAddFile('http://ссылка/' + FileList[i], ExpandConstant('{tmp}\') + FileList[i]);
            
            idpDownloadAfter(wpReady);

            // Copy downloaded files to application directory
            for i := 0 to FileList.Count-1 do
                FileCopy(ExpandConstant('{tmp}\') + FileList[i], ExpandConstant('{app}\moonloader\') + FileList[i], false);
    end;
end;
 

Andreo Fadio

Старожил
@subbotaaa,
Код:
[Code]
var
 uversion: Integer;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurpageID = wpReady then
  begin
   if WizardForm.TypesCombo.Text = 'Moonloader v0.25 (рекомендуется)' then
    //MsgBox('Ура версия 0.25 :)', mbInformation, MB_OK);
    uversion := 25
   if WizardForm.TypesCombo.Text = 'Moonloader v0.26' then
    //MsgBox('Версия 0.26, печалька ;(', mbError, MB_OK);
    uversion := 26
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
 i: Integer;
 FileList: TStringList;
begin
        //Меняем значение ssPostInstall на ssInstall, чтобы отработало до начала самой установки
        if CurStep = ssInstall then
        begin
            if uversion = 25 then
              idpDownloadFile('http://ссылка/downloader25.txt', ExpandConstant('{tmp}\FileList.txt'));
              //MsgBox('Загрузка файлов для 25', mbInformation, MB_OK);
            if uversion = 26 then
              idpDownloadFile('http://ссылка/downloader26.txt', ExpandConstant('{tmp}\FileList.txt'));
              //MsgBox('Загрузка файлов для 26', mbInformation, MB_OK);
            
            FileList := TStringList.Create;
            FileList.LoadFromFile(ExpandConstant('{tmp}\FileList.txt'));
            
            for i := 0 to FileList.Count-1 do
                //Add each file to download queque
                idpAddFile('http://ссылка/' + FileList[i], ExpandConstant('{tmp}\') + FileList[i]);
            
            idpDownloadAfter(wpReady);

            // Copy downloaded files to application directory
            for i := 0 to FileList.Count-1 do
                FileCopy(ExpandConstant('{tmp}\') + FileList[i], ExpandConstant('{app}\moonloader\') + FileList[i], false);
    end;
end;
 

subbotaaa

Мимокрокодил
@subbotaaa,
Код:
[Code]
var
uversion: Integer;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurpageID = wpReady then
  begin
   if WizardForm.TypesCombo.Text = 'Moonloader v0.25 (рекомендуется)' then
    //MsgBox('Ура версия 0.25 :)', mbInformation, MB_OK);
    uversion := 25
   if WizardForm.TypesCombo.Text = 'Moonloader v0.26' then
    //MsgBox('Версия 0.26, печалька ;(', mbError, MB_OK);
    uversion := 26
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
i: Integer;
FileList: TStringList;
begin
        //Меняем значение ssPostInstall на ssInstall, чтобы отработало до начала самой установки
        if CurStep = ssInstall then
        begin
            if uversion = 25 then
              idpDownloadFile('http://ссылка/downloader25.txt', ExpandConstant('{tmp}\FileList.txt'));
              //MsgBox('Загрузка файлов для 25', mbInformation, MB_OK);
            if uversion = 26 then
              idpDownloadFile('http://ссылка/downloader26.txt', ExpandConstant('{tmp}\FileList.txt'));
              //MsgBox('Загрузка файлов для 26', mbInformation, MB_OK);
           
            FileList := TStringList.Create;
            FileList.LoadFromFile(ExpandConstant('{tmp}\FileList.txt'));
           
            for i := 0 to FileList.Count-1 do
                //Add each file to download queque
                idpAddFile('http://ссылка/' + FileList[i], ExpandConstant('{tmp}\') + FileList[i]);
           
            idpDownloadAfter(wpReady);

            // Copy downloaded files to application directory
            for i := 0 to FileList.Count-1 do
                FileCopy(ExpandConstant('{tmp}\') + FileList[i], ExpandConstant('{app}\moonloader\') + FileList[i], false);
    end;
end;
Почему-то результат здесь примерно тот же. Доп. загрузка не проходит. И если разкомментировать строку с MsgBox('Загрузка файлов для 25', mbInformation, MB_OK); и MsgBox('Загрузка файлов для 26', mbInformation, MB_OK); - они срабатывают обе
 

SBalykov

Старожил
Почему-то результат здесь примерно тот же. Доп. загрузка не проходит. И если разкомментировать строку с MsgBox('Загрузка файлов для 25', mbInformation, MB_OK); и MsgBox('Загрузка файлов для 26', mbInformation, MB_OK); - они срабатывают обе
Как-то интересно...
Загружаете во время установки, а установить пытаетесь до...
 

Andreo Fadio

Старожил
@subbotaaa, предоставьте момент установки скаченных архивов. В каком действие вы их устанавливаете/распаковываете?
 

subbotaaa

Мимокрокодил
@subbotaaa, предоставьте момент установки скаченных архивов. В каком действие вы их устанавливаете/распаковываете?
Сам код я немного изменил с Вашей помощью, убрал загрузка файла с списком и скачиваю только 1 нужный файл.
Я так и не понял почему, но у меня не срабатывали if uversion.. точнее срабатывали оба выражения и я решил просто встроить номер версии в ссылку и сработало (костыли наше всё).

Код:
#include <idp.iss>

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId=
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={reg:HKCU\Software\ModManager\games\gta-san-andreas,install_path|{pf}\San Andreas Multiplayer\}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
LicenseFile=C:\Users\mirap\Desktop\lua\инсталятор\лицензия.rtf
InfoBeforeFile=C:\Users\mirap\Desktop\lua\инсталятор\до установки.rtf
;InfoAfterFile=C:\Users\mirap\Desktop\lua\инсталятор\после установки.txt
OutputDir=C:\Users\mirap\Desktop\lua\инсталятор
SetupIconFile=C:\Users\mirap\Desktop\lua\инсталятор\Untitled-3.ico
Compression=lzma
SolidCompression=yes
Uninstallable=no
VersionInfoVersion={#MyAppVersion}
VersionInfoCompany={#MyAppPublisher}
VersionInfoTextVersion={#MyAppVersion}
VersionInfoProductName={#MyAppName}
VersionInfoProductVersion={#MyAppVersion}
MergeDuplicateFiles=False
AppendDefaultDirName=False
SetupLogging=True
DisableWelcomePage=False

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "C:\Users\mirap\Desktop\lua\для инсталятора\*"; Components: lua25; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\Users\mirap\Desktop\lua\для инсталятора026\*"; Components: lua26; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\Users\mirap\Desktop\lua\самп\*"; Components: samp; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\mirap\Desktop\lua\инсталятор\gta_sa.exe"; Components: gta; DestDir: "{app}"; Flags: ignoreversion

[Components]
Name: "lua25"; Description: "MVDHelper + moonloader 0.25 + cleo"; Types: 025; Flags: fixed
Name: "lua26"; Description: "MVDHelper + moonloader 0.26 + cleo"; Types: 026; Flags: fixed
Name: "samp"; Description: "SA:MP 0.3.7"
Name: "gta"; Description: "GTA.exe версии v1.0 US"

[Icons]
Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}"

[Types]
Name: "025"; Description: "Moonloader v0.25 (рекомендуется)"; Flags: iscustom
Name: "026"; Description: "Moonloader v0.26";

[Code]
var uversion: string;
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurpageID = wpReady then
  begin
   if WizardForm.TypesCombo.Text = 'Moonloader v0.25 (рекомендуется)' then
    uversion := '025'
   if WizardForm.TypesCombo.Text = 'Moonloader v0.26' then
    uversion := '026'
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
 i: Integer;
 FileList: TStringList;
begin
    if CurStep = ssPostInstall then
    begin
        idpDownloadFile('http://ссылка/version/' + uversion + '/FILE.luac', ExpandConstant('{app}/moonloader/FILE.luac'));
        
        FileList := TStringList.Create;
        FileList.LoadFromFile(ExpandConstant('{app}/moonloader/FILE.luac'));
    end;
end;
 

Andreo Fadio

Старожил
Сам код я немного изменил с Вашей помощью, убрал загрузка файла с списком и скачиваю только 1 нужный файл.
Я так и не понял почему, но у меня не срабатывали if uversion.. точнее срабатывали оба выражения и я решил просто встроить номер версии в ссылку и сработало (костыли наше всё).
потому что пример был приведен для примера как можно сделать в вашем случае, лучше бы использовать вариант через функции:
Код:
function 025checked: Boolean;
begin
 Result:= WizardForm.TypesCombo.Text = 'Moonloader v0.25 (рекомендуется)';
end;
function 026checked: Boolean;
begin
 Result:= WizardForm.TypesCombo.Text = 'Moonloader v0.26';
end;
Проверять:
if 025checked then ....
if 026checked then ....
Тогда и выражение if uversion. вообще не надо будет проверять и это тоже не пригодится совсем:
Код:
var uversion: string;
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurpageID = wpReady then
  begin
   if WizardForm.TypesCombo.Text = 'Moonloader v0.25 (рекомендуется)' then
    uversion := '025'
   if WizardForm.TypesCombo.Text = 'Moonloader v0.26' then
    uversion := '026'
  end;
end;
 
Сверху