我在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:
感谢您的帮助, 问候, 下进行。
答案 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;