Как показать / использовать выбранный пользователем путь к приложению {app} в InputDirPage в Inno Setup? - PullRequest
2 голосов
/ 09 января 2011

Я создаю установщик с помощью Inno Setup.Я должен взять два пути от пользователя.Один для исполняемых файлов программы и другой для библиотек.Папка приложения по умолчанию - {pf}/companyname/applicationname

. В InitializeWizard я создал вторую страницу, которая берет папку lib от пользователя.

Можно ли изменить папку lib по умолчанию на выбранную пользователем папку {app}?

Я пробовал WizardDirValue.Он просто дает значение {app} по умолчанию, а НЕ путь, который пользователь выбрал на первой странице.

[code]  
procedure InitializeWizard();  
begin  
  page2:= CreateInputDirPage(wpProgress,
    'Select Library Location', 'Where Library files should be stored?',
    'To continue, click Next. If you would like to select a different folder, click Browse.',
    False, 'Libs');    
  page2.Add('');  
  page2.Values[0] := WizardDirValue+'\libs';  
  LibDir := page2.Values[0];  
end

Ответы [ 2 ]

5 голосов
/ 09 января 2011

Как видно из названия InitializeWizard(), это функция инициализации , которая вызывается только один раз перед отображением мастера.Вы можете проверить это самостоятельно, установив точку останова в своем коде - она ​​будет нажата только один раз, прямо в начале.

Поэтому это правильное место для добавления новой страницы мастера и установки значения по умолчанию для любого элемента управления., но невозможно реагировать на изменения на других страницах мастера.Что вам нужно сделать, это обновить путь к библиотеке прямо перед отображением вашей страницы.Правильный способ сделать это - функция NextButtonClick().Вот пример кода:

var
  LibPage: TInputDirWizardPage;

procedure InitializeWizard();
begin
  LibPage := CreateInputDirPage(wpSelectDir, 'Select Library Location',
    'Where should the library files be stored?',
    'To continue, click Next. If you would like to select a different folder, ' +
    'click Browse.', False, 'Libs');
  LibPage.Add('');
  LibPage.Values[0] := WizardDirValue + '\libs';
end;

Это добавит вашу страницу сразу после страницы, которая запрашивает каталог {app}.Так как пользователь может нажать кнопку «Предыдущая», чтобы несколько раз изменить каталог {app}, вы всегда должны обновлять путь к библиотеке, когда ваша страница будет отображаться:

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  if CurPageID = wpSelectDir then
    LibPage.Values[0] := WizardDirValue + '\libs';
end;

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

0 голосов
/ 20 января 2011

Вы можете использовать функцию ExpandConstant.В нем все константы Inno Setup заменены их действительными значениями.Например, ExpandConstant ('{app} \ mydir') должен стать C: \ Program Files \\ mydir.

...