Inno设置用户选择目标目录后如何设置AppId?

时间:2014-01-22 23:43:35

标签: inno-setup

在Inno Setup中,我需要在用户选择安装的目标目录后设置AppId。如何才能做到这一点?文档让我相信这可以通过这个引用来完成,“如果你使用{code:..}常量来允许你的用户自定义AppId,你就不需要在安装开始之前返回实际值。 :...“

我想要完成的是根据用户选择的目标目录设置AppId,以便可以在添加/删除程序中安装和显示应用程序的多个副本。

当我使用像

这样的东西时
AppId={code:GetAppId}

我的“GetAppId”函数中尚未设置常量{app}。

1 个答案:

答案 0 :(得分:1)

由于可以在设置的早期初始化时评估AppId指令值,因此无法安全地扩展其指定的脚本函数{app}常量,甚至不能调用WizardDirValue函数,因为{ {3}}常量需要传递目录选择页面,{app}函数需要向导表单实例。

唯一的方法是声明一个标志变量,它将指示已经为调用WizardDirValue函数创建了向导表单,或者如果您决定扩展{{3你的脚本常量函数中的常量。

使用WizardDirValue函数获取所选目录的脚本可能如下所示:

[Setup]
AppId={code:GetAppId}
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
UsePreviousLanguage=no
OutputDir=userdocs:Inno Setup Examples Output

[Code]
var
  CanGetDir: Boolean;

function InitializeSetup: Boolean;
begin
  Result := True;
  CanGetDir := False;
end;

procedure InitializeWizard;
begin
  CanGetDir := True;
end;

function GetAppId(Value: string): string;
begin
  Result := '';
  if CanGetDir then
    Result := ExtractFileName(WizardDirValue) + '123';
end;

扩展{app}常量以获取所选目录的脚本可能如下所示:

[Setup]
AppId={code:GetAppId}
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
UsePreviousLanguage=no
OutputDir=userdocs:Inno Setup Examples Output

[Code]
var
  CanGetDir: Boolean;

function InitializeSetup: Boolean;
begin
  Result := True;
  CanGetDir := False;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectDir then
    CanGetDir := True;
end;

function GetAppId(Value: string): string;
begin
  Result := '';
  if CanGetDir then
    Result := ExtractFileName(ExpandConstant('{app}')) + '123';
end;