当前位置: 首页 > 知识库问答 >
问题:

Inno Setup:如何从InstallDelete部分调用自定义函数

姜献
2023-03-14

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

我试图通过比较版本号(下面的自定义函数)来做到这一点,但是在编译时,Inno Setup生成了一个错误:

[ISPP]未声明的标识符:“获取安装版本”。

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 Setup的新手,这当然是一个微不足道的问题,但在论坛上找不到答案。因此,问题是:如何从[InstallDelete]部分正确调用函数GetInstalledVersion

是否存在问题,因为在读取< code>[code]部分之前可能会调用< code>[InstallDelete]部分?

非常感谢任何帮助/提示!

共有1个答案

范书
2023-03-14

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

那么你需要的是参数检查 http://www.jrsoftware.org/ishelp/index.php?topic=scriptcheck

[Code]
function isOldVersionInstalled: Boolean;
begin
  // Result := <True|False>;
end;

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

你的例子有什么问题:

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

 类似资料:
  • $this->db->call_function(); 这个方法用于执行一些 CodeIgniter 中没有定义的 PHP 数据库函数,而且 使用了一种平台独立的方式。举个例子,假设你要调用 mysql_get_client_info() 函数,这个函数 CodeIgniter 并不是原生支持的,你可以这样做: $this->db->call_function('get_client_info')

  • 问题内容: 如果我要在数据库中定义某些功能(也许是Postgres或任何其他数据库): 我会从SQL中将其称为: 如何从Hibernate调用诸如此类的自定义函数? 问题答案: 如果要在HQL中使用自定义函数,则需要在相应的方言中定义它 看一下PostgreSQLDialect(或其他任何来源)的源代码,您会看到一堆registerFunction()调用。您需要再添加一个:-)-用于您自己的自定

  • 问题内容: 大家好! 我有这样的电话: 是否可以将其包装在自定义函数中 但 保留回调? 就像是: 将是这样的: 问题答案: 编辑: 最近对此表示赞同,我不得不说我不再这样做。返回a,因此您可以直接使用promise以更一致和更可靠的方式执行我在这里所做的几乎所有工作。 然后用法如下: 当然,我一直都这样做。您可以在实际的成功Callack中执行回调,也可以将回调分配为成功回调: 用法如下所示:

  • @ganeshsittampalam在下面的一条评论中提出了一个重要的观点。我正在寻找“一个中途之家之间没有类型签名在所有和必须给一个精确的”。所以,我不是在寻找一个基于类型类的答案,我只是想让GHC为我的函数的未指定(或未完全限制)类型填充空白处。 是的,像这样的... ...可以工作,但仅限于参数,且函数不是无点的。是否有一种方法可以将这种技术应用于无点函数或返回值? @Rhymoid,如果你

  • 本文向大家介绍js自定义回调函数,包括了js自定义回调函数的使用技巧和注意事项,需要的朋友参考一下 背景分析 首先看一段js的代码,主要实现添加的时候首先通过异步请求判断是否存在,如果不存在的话,在进行添加操作: 当我添加一个数据的时候,我首先通过判断是否在数据库中存在(当然,如果前后台彻底分离的话,不应该前端进行业务逻辑的判断,前端只应该,用来展示数据),首先,isExited()的请求是aja

  • 我正在使用jQuery,我有一个函数作为事件回调,所以在这个函数中,“this”代表捕获事件的对象。然而,有一个实例,我想从另一个函数显式调用函数——在这种情况下,我如何在函数中设置“this”等于什么? 例如: