2010-11-14 4 views
3

Есть ли способ установить DefaultDirName по коду в зависимости от некоторого деления, которое пользователь выполнил при установке?Inno setup и DefaultDirName

Позвольте мне прокомментировать: У меня есть код, который построен для двух разных систем (с использованием разных interops/ocx и т. Д.). Мои входные файлы хранятся в двух каталогах ввода \ A и input \ B. Я хочу иметь только один файл установки для обеих систем.

В установочном файле я использую CreateInputOptionPage с двумя параметрами для определения, какие файлы для установки (с помощью проверки на каждый файл). Это работает нормально.

Но у меня также есть оболочка ShellExec при завершении настройки, которая на данный момент использует {app}, например. зарегистрируйте некоторые .Net-классы и ShellExec, чтобы отменить регистрацию классов .Net на InitializeUninstall (также использует {app})

Установка должна установить программное обеспечение в двух разных местах (в зависимости от выбора пользователя (например, c: \ software_a или c: \ software_b). Невозможно это изменить.

Итак, есть ли способ указать DefaultDirName, прежде чем файлы будут скопированы в систему, поэтому я могу использовать тот же ShellExec при установке и удалении? конечно, добавьте тот же ShellExec для обеих систем при установке и используйте if, чтобы проверить, какие файлы регистрироваться (в зависимости от выбора пользователя), но при удалении i не будет иметь эту информацию (выбор пользователя), поэтому я не могу отменить регистрацию .Net классы

thanks

ответ

1

Если необходимо изменить папку установки после DefaultDirName инициализирован, это работает для меня достаточно хорошо:

procedure CurPageChanged(CurPageID: Integer); 
begin 
    { updates the install path depending on the install type or the entered suffix } 
    if CurPageID = wpSelectDir then begin 
    WizardForm.DirEdit.Text := ExpandConstant('{pf}') + '\MyAppName' + GetAppSuffix(''); 
    end; 
end; 

Приветствия Chris

+0

В чем причина 'GetAppSuffix ('')'? –

3

В разделе кода CreateInputOptionPage вы можете установить значение, а затем использовать это значение в фрагменте кода ниже. Я не тестировал его, но он мог бы работать.

[Setup] 
DefaultDirName={code:getpath} 

[Code] 
function GetPath(Default: string): string; 
begin 

if (CreateInputOptionPageValue1) then 
Result := ExpandConstant({sd}) + '\path1'; 
else 
Result := ExpandConstant({sd}) + '\path2'; 
end; 
+0

Здравствуйте, я попытался с помощью { code :.} для DefaultDirName, но установщик существует с ошибкой. Вероятно, потому что значение нужно установить до начала установки, и значение из радиообъектов присутствует только после того, как будет показано первое диалоговое окно ... –

+1

Я сделал это «ручной» способ ... укажите {pf} \ dir для DefaultDirName (поэтому мой деинсталлятор устанавливается там) и делайте весь материал с помощью Desc: {code: ...} и Check() в разделе «Файлы». Кажется, работает до сих пор –

+0

Да, 'Param' не может быть глобальным. В справке [Setup section] (http://www.jrsoftware.org/ishelp/index.php?topic=setupsection) не обсуждается использование [параметров в разделах] (http://www.jrsoftware.org/ ishelp/index.php? topic = params), но может быть возможно передать любой из [общих параметров] (http://www.jrsoftware.org/ishelp/index.php?topic=commonparams). FWIW нет, поскольку в разделе установки использовалась функция [Проверить] (http://www.jrsoftware.org/ishelp/index.php?topic=scriptcheck) или [До/После установки] (http: // www .jrsoftware.org/ishelp/index.php? topic = scriptinstall). –

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