如何在Inno Setup中安装之前更改defaultdirname参数?

5 inno-setup

我想在ssInstall部分中更改defaultdirname参数.我怎样才能做到这一点?是否有设置[设置]参数的功能.

Jon*_*onx 10

可以使用以下全局对象:类型为TMainForm的MainForm,类型为TWizardForm的WizardForm和类型为TUninstallProgressForm的UninstallProgressForm,以及一个特殊常量:类型为TControl.Cursor的crHand.

如果你想在向导中设置默认目录,只需像在普通的delphi代码中那样访问它的组件.

例如,将目录设置为自定义值:

WizardForm.DirEdit.Text := 'c:\test';
Run Code Online (Sandbox Code Playgroud)

要读取该值,您可以使用WizardDirValue函数.

我说'只是访问'......但是花了我一个小时来弄明白;)


Tre*_*reb 3

似乎无法通过脚本更改脚本常量。
我认为你最好的选择是修改[Files]部分中每个条目的目标目录,例如

[Files]
Source: "MYPROG.EXE"; DestDir: "{code:NewTargetDir}"
Run Code Online (Sandbox Code Playgroud)

并像这样导出新的安装目录:

[Code]
function NewTargetDir(Param: String): String;
begin
  Result := ExpandConstant('{app}') + '\MySubDir';
end;
Run Code Online (Sandbox Code Playgroud)

由于NewTargetDir函数将在实际复制文件之前被调用,因此这应该可行。

但是,我认为您应该重新考虑您的方法。首先要求用户指定要安装的目录,然后实际安装到不同的目录中,这似乎是您的意图,但在我看来是错误的方法。您是否真的有令人信服的理由将其安装到用户指定的目录之外的另一个目录中?此外,我的示例代码的结果也可以通过指定来实现

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}\MySubDir"
Run Code Online (Sandbox Code Playgroud)

无需任何脚本。如有疑问,请寻求更简单的解决方案。