2016-03-30 5 views
1

Мне нужно создать пользовательскую страницу из двух пунктов назначения.Используйте два или несколько выбранных каталогов с пользовательской страницы в разделе «Файлы»

Я сделал:

#define MyAppName "TESTPROG" 
[Setup] 

AppName={#MyAppName} 
DefaultDirName=C:\test\{#MyAppName} 
DefaultGroupName={#MyAppName} 

[Code] 
var 
    Page: TInputDirWizardPage; 
    DataDir: String; 

procedure InitializeWizard; 
begin 
    Page := CreateInputDirPage(wpWelcome, 
    'Select Personal Data Location', 'Where should personal data files be stored?', 
    'Personal data files will be stored in the following folder.'#13#10#13#10 + 
    'To continue, click Next. ' + 
     'If you would like to select a different folder, click Browse.', 
    False, 'New Folder'); 

    Page.Add('Local APP'); 
    Page.Add('Local Storage'); 

    Page.Values[0] := ('C:\My Program'); 
    Page.Values[1] := ('D:\My Program'); 

    DataDir := Page.Values[0]; 
end; 

мне нужно знать, как и где я поставил DefaultDirName с Page.Values[0] и Page.Values[1]

мне это нужно, потому что какая-то часть моих файлов будет находиться в папке и другие в другой папке.

Например:

[Files] 
Source: C:\TEST\DLL1.bat; DestDir: Page.Values[0]\sys1; 
Source: C:\TEST\DLL2.bat; DestDir: Page.Values[1]\sys2; 
+0

*, где я установил DefaultDirName с Page.Values ​​[0] и Page.Values ​​[1] *: Вы можете установить значения по умолчанию уже в вашем коде: 'Page.Values ​​[0]: = ('C: \ Моя программа '); '. Вы действительно спрашиваете, как использовать выбранный каталог в разделе «Файлы»? –

ответ

2

Используйте scripted constant:

[Files] 
Source: C:\TEST\DLL1.bat; DestDir: "{code:GetDir|0}\sys1" 
Source: C:\TEST\DLL2.bat; DestDir: "{code:GetDir|1}\sys2" 

[Code] 

var 
    Page: TInputDirWizardPage; 

function GetDir(Param: string): string; 
begin 
    Result := Page.Values[StrToInt(Param)]; 
end; 

procedure InitializeWizard; 
begin 
    Page := CreateInputDirPage(...); 
    ... 
end; 

Если вы хотите использовать один из (первых) путей от TInputDirWizardPage вместо пути от «Выберите пункт« Место назначения », у вас есть три варианта.

  1. Отключить "Select Destination Location" страницу с помощью DisableDirPage directive:

    DisableDirPage=yes 
    

    Скопируйте путь от TInputDirWizardPage к скрытому "Выбрать Destination Location" страницы, когда пользователь нажимает Вперед кнопка:

    var 
        Page: TInputDirWizardPage; 
    
    function InputDirPageNextButtonClick(Sender: TWizardPage): Boolean; 
    begin 
        { Use the first path as the "destination path" } 
        WizardForm.DirEdit.Text := Page.Values[0]; 
        Result := True; 
    end; 
    
    procedure InitializeWizard(); 
    begin 
        Page := CreateInputDirPage(...); 
        ... 
        Page.OnNextButtonClick := @InputDirPageNextButtonClick; 
    end; 
    

    В дополнение к этому вы также можете рассмотреть возможность копирования начального WizardForm.DirEdit в свой пользовательский флажок. Таким образом, вы убедитесь, что 1) при повторной установке/обновлении ранее выбранное значение повторно используется; 2) /DIR command-line switch работ. Для этого см. How to make Inno Setup /DIR command line switch work with custom path page.

  2. Заменить все виды использования {app} constant на {code:GetDir|0}.

    Сделать Setup Inno не создать {app} путь с помощью CreateAppDir directive:

    CreateAppDir=no 
    

    (это означает DisableDirPage=yes).

    и имеют деинсталлировать файлы будут сохранены в первом пути с помощью UninstallFilesDir directive:

    UninstallFilesDir={code:GetDir|0} 
    

    В отличие от 1), при таком подходе предыдущего пути установки не будет повторно использоваться для последующего обновления/переустановки , Чтобы реализовать это, см. Inno Setup Prompt user for a folder and store the value.

  3. Не используйте CreateInputDirPage, а добавить второй входной путь поле на "Select Destination Location" странице (SelectDirPage).

+0

Привет Мартин, я использовал: [Setup] DefaultDirName = C: \ Test \ {# MyAppName} Как я могу установить DefaultDirName = {код: GetDir | 0} Regards – Robertopcn

+0

ли вы имеете в виду, что вы делаете не используйте стандартную * страницу «Выбрать место назначения» *, так что вы хотите, чтобы * «Локальный APP» * на вашей пользовательской странице заменил его? Вы устанавливаете 'DisableDirPage = yes'? –

+0

Да, именно это. Я хочу использовать Local APP. Я попытался отключить «DisableDPage = no», но не работал. Я также попробовал DefaultDirName = {code: GetDir | 0}, но обнаружил ошибку. – Robertopcn

 Смежные вопросы

  • Нет связанных вопросов^_^