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