Pascal Scripting:在设置{app}变量之前取消设置

时间:2014-01-17 16:00:40

标签: inno-setup

我在Inno Setup文件的[Dirs]部分有一些声明。我使用“Inno Setup Compiler”和普通文本编辑器(Notepad ++)进行开发。 当我在选择安装目录之前取消设置时,{app}变量肯定是空的。 我得到这个错误(这完全是逻辑):

如何解决按“取消”按钮并提交我想取消设置后没有发生错误的信息?

  

内部错误:尝试扩展“app”常量   在它被初始化之前。

我可以全局设置{app}变量或为其指定默认值吗?

以下是我使用变量{app}:

的代码段
[Dirs]
Name: {app}; Permissions: everyone-readexec
Name: {app}\bin; Permissions: everyone-readexec

[Run]
Filename: "{app}\run.exe; Flags: runhidden

[INI]
Filename: {app}\bin\myIni.ini; Section: Settings;

[InstallDelete]
Name: {app}\*; Type: filesandordirs; Tasks: 

感谢您的帮助, 问候, 下进行。

2 个答案:

答案 0 :(得分:3)

您应该跳过代码,该代码会在初始化之前尝试展开{app}常量,或者作为解决方法,您可以使用WizardDirValue,它实际上会将值返回到{app}当它被扩展时。甚至参考提到(我强调):

  

返回Select上编辑控件的当前内容   向导的目标位置页面。

     

与ExpandConstant('{app}')不同,如果在显示向导之后但在用户选择之前调用此函数,则此函数不会失败   目录。而是返回默认目录名。

在最新的源代码中,您可以看到在this line上如何展开{app}常量。

答案 1 :(得分:0)

感谢您的帮助,问题得到了解决!

在用户到达“选择目的地位置”之前,未设置{app}变量。 我的DeInitialize-Procedure看起来像这样:

procedure DeinitializeSetup();
var
  SettingsPath: String;
begin   
    SettingsPath := ExpandConstant('{app}')
    DelTree(SettingsPath + '\bin', True, True, True);
end;

我做的是在开头创建了一个布尔变量:

[Code]
var appIsSet: Boolean;

我在初始化时将其设置为false:

function InitializeSetup(): Boolean;
begin
//    interesting code
appIsSet := False;
end;

...并在用户到达nextButtonClick中的'wpSelectDir'后将其设置为'true'(请参阅下面的代码段:)

begin
if CurPageID = wpSelectDir then
begin
    appIsSet := True;

最后一步是检查Deinitialize-Procedure是否设置了布尔变量。如果是这样,他可以访问它,如果没有 - 什么都不做:

procedure DeinitializeSetup();
var
    SettingsPath: String;
begin
if appIsSet then begin
    SettingsPath := ExpandConstant('{app}')
    DelTree(SettingsPath + '\bin', True, True, True);
end;
end;