Использовать два / несколько выбранных каталогов с пользовательской страницы в разделе "Файлы"
Мне нужно создать пользовательскую страницу из двух пунктов назначения.
Я сделал:
#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;
1 ответ
Используйте скриптовую константу:
[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
вместо пути со страницы "Выбор места назначения" у вас есть три варианта.
Отключите страницу "Выбор места назначения", используя
DisableDirPage
директива:DisableDirPage=yes
Скопируйте путь из
TInputDirWizardPage
на скрытую страницу "Выберите место назначения", когда пользователь нажимает кнопку " Далее":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
переключатель командной строки работает. Об этом см. В разделе Как заставить переключатель командной строки Inno Setup /DIR работать с пользовательской страницей пути.Заменить все виды использования
{app}
постоянный с{code:GetDir|0}
,Сделать Inno Setup не создавать
{app}
путь с помощьюCreateAppDir
директива:CreateAppDir=no
(Из этого следует
DisableDirPage=yes
).И файлы удаления должны быть сохранены в первом пути, используя
UninstallFilesDir
директива:UninstallFilesDir={code:GetDir|0}
В отличие от 1), при таком подходе предыдущий путь установки не будет повторно использоваться для последующего обновления / переустановки. Чтобы реализовать это, см. Inno Setup Prompt user для папки и сохраните значение.
Не используйте
CreateInputDirPage
, а лучше добавить второе поле ввода пути на странице "Выбор места назначения" (SelectDirPage
).