Я хочу установить два файла в установочный каталог. Каталог выбирается пользователем во время установки и создается, если он не существует. Должен быть предложен путь по умолчанию.
Что у меня есть на данный момент:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
AppName=Testapp
AppVersion=1.0
DefaultDirName = {code:GetOtherDir}
DefaultGroupName=TestProgram
PrivilegesRequired = lowest
OutputBaseFilename =TestProgram
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "program.exe"; DestDir: "{app}"
Source: "readme.txt"; Flags: onlyifdoesntexist; DestDir: "{app}"
[Icons]
Name: "{userdesktop}\Subdirectory"; Filename: "{userdocs}\Subdirectory\program.exe"; Tasks: desktopicon
[Code]
var
OtherInputDirPage: TInputDirWizardPage;
procedure InitializeWizard;
begin
OtherInputDirPage :=
CreateInputDirPage(wpSelectDir, 'Installationsverzeichnis wählen:', '', '', False, '');
OtherInputDirPage.Add('');
// Set initial value (optional)
OtherInputDirPage.Values[0] := ExpandConstant('{userdocs}\Subdirectory');
end;
function GetOtherDir(Param: String): String;
begin
Result := OtherInputDirPage.Values[0];
end;
Я могу установить один файл в определенное пользователем местоположение с другим кодом, но я не могу использовать это место также для второго файла, поэтому я придумал код выше. Кто-нибудь может помочь?
Извините, но не могли бы вы указать мне какой-нибудь пример кода для стандартной страницы?
Код, который вы пытаетесь выполнить, кажется излишне сложным для такой тривиальной задачи. Базовый сценарий Inno Setup для установки двух файлов в выбранный пользователем каталог выглядит следующим образом:
[Setup]
AppName=My Program
AppVersion=1.0
DefaultDirName = {autopf}\My Program
[Files]
Source: "program.exe"; DestDir: "{app}"
Source: "readme.txt"; DestDir: "{app}"
Возможно, вы запутались, поскольку приложение у вас уже установлено и стандартная страница выбора каталога не отображается. См.:
Программа установки, созданная Inno Setup, не отображает страницу «Выбрать место назначения» в некоторых системах
Комментарий Мартина Прикрыла был весьма полезен, и моя дополнительная проблема заключалась в том, что DisableDirPage=no отсутствовал, и поэтому диалоговое окно выбора каталога не отображалось, поскольку программа уже была установлена один раз.
[Setup]
AppName=Test
AppVersion=1.0
DefaultDirName = {userdocs}\Testprogramdir
//DisableProgramGroupPage=yes
AlwaysShowDirOnReadyPage = yes
DisableDirPage = no
OutputDir=Output
[Files]
Source: "program.exe"; DestDir: "{app}"
Source: "readme.txt"; DestDir: "{app}"
[Code]
function NextButtonClick(CurPageID: Integer): Boolean;
var
InstallDir: string;
begin
Result := True;
if CurPageID = wpSelectDir then begin
InstallDir := WizardForm.DirEdit.Text;
if not DirExists(InstallDir) then begin
if not CreateDir(InstallDir) then begin
MsgBox('Could not create installation directory.', mbError, MB_OK);
Result := False;
end;
end;
WizardForm.DirEdit.Text := InstallDir; // Update the directory edit field
end;
end;
1) Зачем тебе DisableDirPage=no
? 2) В чем смысл вашего NextButtonClick
? Inno Setup создаст папку за вас. + Имхо, WizardForm.DirEdit.Text := InstallDir
ничего не делает.
Основная проблема сложнее, так как я ищу способ адаптировать имя значка, но я открыл новую тему с уточненным вопросом по этому поводу: stackoverflow.com/questions/78095282/…
Вот всё равно имхо не объясняет, для чего нужен ваш NextButtonClick
.
Более того, если смысл DisableDirPage=no
в том, что вы хотите установить одну и ту же программу несколько раз, то вы только скрываете проблему, заключающуюся в том, что вы устанавливаете все экземпляры с использованием одного и того же AppId
, поэтому вы сможете установить только последнюю установленную копию.
Что касается NextButtonClick
: поскольку я хотел изменить имя ссылки на рабочем столе, я понял, что мне нужна какая-то переменная в функции, которая извлекает имя из имени каталога и использует ее для изменения имени ссылки на рабочем столе. Единственный способ создать переменную — это функция, поэтому я начал с NextButtonClick
. В конце концов я нашел более элегантный способ в другом посте.
Что касается DisableDirPage=no
: вы имеете в виду удалить последнюю копию? Меня это устраивает, я не являюсь активным пользователем, это быстрое и грязное решение довольно трудоемкой проблемы. Спасибо за вашу помощь!
Что касается NextButtonClick
– но значок на рабочем столе не является частью ЭТОГО вопроса. Так что функция NextButtonClick
здесь только сбивает с толку.
Что касается DisableDirPage=no
— если лично для вас вы предпочитаете быстрые и грязные решения, это ваш выбор, но если вы хотите предложить свое решение публично, вам следует хотя бы признать, что оно быстрое и грязное.
Зачем вы создаете
OtherInputDirPage
? Почему бы вам не использовать стандартную страницу «Выбор каталога»? + Какой "второй файл" не устанавливается? Выложите лог-файл.