在Inno Setup中,我需要在用户选择安装的目标目录后设置AppId。如何才能做到这一点?文档让我相信这可以通过这个引用来完成,“如果你使用{code:..}常量来允许你的用户自定义AppId,你就不需要在安装开始之前返回实际值。 :...“
我想要完成的是根据用户选择的目标目录设置AppId,以便可以在添加/删除程序中安装和显示应用程序的多个副本。
当我使用像
这样的东西时AppId={code:GetAppId}
我的“GetAppId”函数中尚未设置常量{app}。
答案 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;