Inno setup Pascal脚本:在设置{app}变量之前取消安装

Inno setup Pascal脚本:在设置{app}变量之前取消安装,inno-setup,Inno Setup,我在Inno设置文件的[Dirs]部分有一些声明。我使用“Inno安装编译器”和一个普通的文本编辑器(Notepad++)进行开发。 当我在选择安装目录之前取消安装时,{app}变量肯定是空的。 我得到了这个错误(这完全符合逻辑): 在按下“取消”按钮并提交要取消设置后,如何修复未发生错误 内部错误:试图展开“app”常量 在初始化之前 我可以全局设置{app}变量还是给它一个默认值 下面是我使用变量{app}的代码片段: [Dirs] Name: {app}; Permissions: eve

我在Inno设置文件的[Dirs]部分有一些声明。我使用“Inno安装编译器”和一个普通的文本编辑器(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: 
谢谢你的帮助, 当做
C.

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

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

与ExpandConstant(“{app}”)不同,如果在显示向导之后,但在用户选择 目录。相反,它将返回默认目录名


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

谢谢您的帮助,问题解决了

在用户到达“选择目标位置”之前,{app}变量未设置。 我的取消初始化过程如下所示:

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”(请参阅下面的代码片段:)

最后一步是,如果设置了布尔变量,则检查Deinitialize过程。如果是,他可以访问它,如果不是-什么也不做:

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

如果您的问题被编辑成包含源代码的相关部分,这将非常有用。了解您正在使用的特定软件也会很有帮助。只需补充一下。似乎您正在创建一些设置,当设置未初始化时,您将删除这些设置。使用安装程序的临时文件夹不是更好吗?不客气!最好使用
{tmp}
,因为安装程序完成后会为您清理它。
procedure DeinitializeSetup();
var
    SettingsPath: String;
begin
if appIsSet then begin
    SettingsPath := ExpandConstant('{app}')
    DelTree(SettingsPath + '\bin', True, True, True);
end;
end;