Inno setup Inno设置:如何从InstallDelete部分调用自定义函数

Inno setup Inno设置:如何从InstallDelete部分调用自定义函数,inno-setup,pascalscript,Inno Setup,Pascalscript,我需要Inno安装程序生成的安装程序在安装之前删除某些文件,如果该软件已经安装了旧版本 我试图通过比较版本号(下面的自定义函数)来实现这一点,但在编译时,Inno安装程序生成一个错误: [ISPP]未声明的标识符:“GetInstalledVersion” Inno设置脚本相关摘录为: (...) [Code] function GetInstalledVersion(MandatoryButNotUsedParam: String): String; var Version: String;

我需要Inno安装程序生成的安装程序在安装之前删除某些文件,如果该软件已经安装了旧版本

我试图通过比较版本号(下面的自定义函数)来实现这一点,但在编译时,Inno安装程序生成一个错误:

[ISPP]未声明的标识符:“GetInstalledVersion”

Inno设置脚本相关摘录为:

(...)
[Code]
function GetInstalledVersion(MandatoryButNotUsedParam: String): String;
var Version: String;
begin
  if RegValueExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+ExpandConstant('AppId')+'_is1', 'DisplayVersion') then
    begin
      RegQueryStringValue(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+ExpandConstant('AppId')+'_is1', 'DisplayVersion', Version);
      MsgBox(ExpandConstant('Existing version:'+Version+'  New version:'+ExpandConstant('AppVersion')), mbInformation, MB_OK);
      Result := Version;
    end
  else
    begin
      Result := '';
    end
end;
(...)
[InstallDelete]
#define InstalledAppVersion GetInstalledVersion('')
#if "1.013" > InstalledAppVersion
  Type: files; Name: {userappdata}\xxx\*.hhd
#endif
作为Inno安装的新手,这当然是一个微不足道的问题,但在论坛上找不到答案。因此,问题是:如何从
[InstallDelete]
部分正确调用函数
GetInstalledVersion

是否存在问题,因为在读取
[code]
节之前可能会调用
[InstallDelete]


非常感谢您的帮助/提示

是否要检查当前安装的版本,以及是否低于1.013, 然后从
{userappdata}\xxx\*.hhd
中删除用户文件

然后您需要的是参数
检查

[代码]
已安装的函数IsoldVersion:布尔值;
开始
//结果:=;
结束;
[安装删除]
类型:档案;***检查:已安装IsoldVersion;
您的示例有什么问题:

您正在从预处理器调用Pascal函数。 这是两件不同的事情。
您可以在预处理器中定义宏-这有点像函数,
但这不是您想要的,因为预处理器只在编译时运行,因此不能用于检查用户文件/环境的状态。

是否要检查当前安装的版本,以及是否低于1.013, 然后从
{userappdata}\xxx\*.hhd
中删除用户文件

然后您需要的是参数
检查

[代码]
已安装的函数IsoldVersion:布尔值;
开始
//结果:=;
结束;
[安装删除]
类型:档案;***检查:已安装IsoldVersion;
您的示例有什么问题:

您正在从预处理器调用Pascal函数。 这是两件不同的事情。
您可以在预处理器中定义宏-这有点像函数,
但这不是您想要的,因为预处理器只在编译时运行,因此不能用于检查用户文件/环境的状态。

是否要检查当前安装的版本,以及是否低于1.013, 然后从
{userappdata}\xxx\*.hhd
中删除用户文件

然后您需要的是参数
检查

[代码]
已安装的函数IsoldVersion:布尔值;
开始
//结果:=;
结束;
[安装删除]
类型:档案;***检查:已安装IsoldVersion;
您的示例有什么问题:

您正在从预处理器调用Pascal函数。 这是两件不同的事情。
您可以在预处理器中定义宏-这有点像函数,
但这不是您想要的,因为预处理器只在编译时运行,因此不能用于检查用户文件/环境的状态。

是否要检查当前安装的版本,以及是否低于1.013, 然后从
{userappdata}\xxx\*.hhd
中删除用户文件

然后您需要的是参数
检查

[代码]
已安装的函数IsoldVersion:布尔值;
开始
//结果:=;
结束;
[安装删除]
类型:档案;***检查:已安装IsoldVersion;
您的示例有什么问题:

您正在从预处理器调用Pascal函数。 这是两件不同的事情。
您可以在预处理器中定义宏-这有点像函数,
但这不是您想要的,因为预处理器只在编译时运行,因此无法用于检查用户文件/环境的状态。

非常感谢,这确实解决了问题。不幸的是,我现在遇到了一个函数根本没有被调用的问题,因为它可能是相关的,我在这里发布了链接:非常感谢,这确实解决了问题。不幸的是,我现在遇到了一个函数根本没有被调用的问题,因为它可能是相关的,我在这里发布了链接:非常感谢,这确实解决了问题。不幸的是,我现在遇到了一个函数根本没有被调用的问题,因为它可能是相关的,我在这里发布了链接:非常感谢,这确实解决了问题。不幸的是,我现在遇到了一个问题,函数根本没有被调用,因为它可能是相关的,我在这里发布链接:
[Code]
function isOldVersionInstalled: Boolean;
begin
  // Result := <True|False>;
end;

[InstallDelete]
Type: files; Name: {userappdata}\xxx\*.hhd; Check:isOldVersionInstalled;