使用 Inno Setup 在安装过程中删除和取消注册 DLL 文件

2023-12-04

In my [Files]第 I 节有以下内容:

; Database password decryption (for PTS importing)
Source: "..\..\..\PTSTools\PTSTools\bin\x86\Release\PTSTools.dll"; \
    DestDir: "{app}"; \
    DestName: "PTSTools_x86.dll"; Flags: ignoreversion
Source: "..\..\..\PTSTools\PTSTools\bin\x64\Release\PTSTools.dll"; \
    DestDir: "{app}"; \
    DestName: "PTSTools_x64.dll"; Flags: ignoreversion; Check: IsWin64

In the [Run]我有部分:

Filename: "{dotnet40}\regasm.exe"; Parameters: "PTSTools_x86.dll /codebase"; \
    WorkingDir: "{app}"; Flags: runhidden
Filename: "{dotnet4064}\regasm.exe"; Parameters: "PTSTools_x64.dll /codebase"; \
    WorkingDir: "{app}"; Flags: runhidden; Check: IsWin64

最后,在[UninstallRun]我有部分:

Filename: {dotnet40}\regasm.exe; Parameters: /u PTSTools_x86.dll; \
     WorkingDir: {app}; \
    Flags: runhidden
Filename: {dotnet4064}\regasm.exe; Parameters: /u PTSTools_x64.dll;  \
    WorkingDir: {app}; \
    Flags: runhidden; Check: IsWin64;

现在,在我的程序的这个版本中,我已将这两个 DLL 文件的功能合并到另一组 DLL 文件中:

Source: "..\..\..\MSAToolsLibrary\MSAToolsLibrary\bin\x86\Release\MSAToolsLibrary.dll"; \
    DestDir: "{app}"; DestName: "MSAToolsLibrary_x86.dll"; Flags: ignoreversion
Source: "..\..\..\MSAToolsLibrary\MSAToolsLibrary\bin\x64\Release\MSAToolsLibrary.dll"; \
    DestDir: "{app}"; DestName: "MSAToolsLibrary_x64.dll"; Flags: ignoreversion; \
    Check: IsWin64

结果,PTSTool不再需要 DLL 文件。现在,我知道如果它们存在的话我可以简单地删除它们:

[InstallDelete]
Type: files; Name: "{app}\PTSTools_x64.dll"
Type: files; Name: "{app}\PTSTools_x86.dll"

但据我所知,这不会像中那样触发 DLL 文件的注销[UninstallRun].

我怎样才能做到这一点?在安装过程中删除并取消注册 DLL 文件(如果存在)?


我认为您无法使用标准部分轻松实现这一点。

A [Run]条目仅在之后发生[InstallDelete]。虽然您需要以相反的方式先注销,然后再删除 DLL。


所以你需要 Pascal 脚本。

要么添加BeforeInstall范围 to [InstallDelete]并以编程方式取消注册 DLL。

Or add AfterInstall范围 to [Run]并以编程方式删除 DLL。

后者对您来说工作量较少,因为您已经知道如何使用[Run]注册(取消)。

[Run]
Filename: {dotnet40}\regasm.exe; Parameters: /u PTSTools_x86.dll; \
    WorkingDir: {app}; \
    Check: FileExists(ExpandConstant('{app}\PTSTools_x86.dll')); \
    AfterInstall: DoDeleteFile(ExpandConstant('{app}\PTSTools_x86.dll')); \
    Flags: runhidden
Filename: {dotnet4064}\regasm.exe; Parameters: /u PTSTools_x64.dll;  \
    WorkingDir: {app}; \
    Check: IsWin64 and FileExists(ExpandConstant('{app}\PTSTools_x64.dll')); \
    AfterInstall: DoDeleteFile(ExpandConstant('{app}\PTSTools_x64.dll')); \
    Flags: runhidden
[Code]

{ Cannot use built-in DeleteFile directly in AfterInstall as it's a function,
{ not a procedure. And this way we can add some error handling too. }
procedure DoDeleteFile(FileName: string);
begin
  if DeleteFile(FileName) then
  begin
    Log(Format('"%s" deleted', [FileName]));
  end
    else
  begin
    MsgBox(Format('Failed to delete "%s"', [FileName]), mbError, MB_OK);
  end;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Inno Setup 在安装过程中删除和取消注册 DLL 文件 的相关文章

  • 如何在Windows XP中安装延迟自动启动类型的服务

    我的安装程序在 Inno Setup 中使用以下命令创建服务 Filename sys sc exe Check IsAdminLoggedOn Parameters create Example start delayed auto bi
  • 命令行开关阻止 Inno Setup 安装程序创建桌面图标

    我正在尝试为 Balsamiq Mockups 创建静默安装 该安装似乎是使用 Inno Setup 编译器创建的 作为标准静默安装的一部分 它会创建一个我希望阻止的桌面快捷方式 有谁知道相关的命令行开关来防止创建桌面图标 我尝试过使用 M
  • 在自定义布局页面上选择图像文件并将文件复制到安装文件夹

    我的目标是让用户使用此安装程序 插入您的姓名 选择您的语言并设置自定义参数 这样就完成了 但我需要的是用户选择一个图像将其作为应用程序中的头像 这就是用户选择图像然后将文件复制到应用程序文件夹的原因 像这样的事情 这是我的代码 如果有人可以
  • 将用户定义的命令行参数添加到/?窗户

    使用 Inno Setup 可以添加用户定义的命令行参数 当我使用 HELP命令中未列出用户定义的参数 如何将带有描述的命令添加到 HELP window Inno Setup 6 0 支持HelpTextNote message http
  • 使用InnoIDE写入AppData目录?

    我需要写信给 C Users 用户 AppData Roaming AppName 安装过程中的文件夹 我使用 InnoIDE 程序进行设置 非常棒 然而 它似乎缺少一个 AppData 特殊文件夹来轻松访问该目录 例如 您可以使用 Des
  • 根据用户输入更改 AppID 和 AppName

    我想在同一系统上多次安装同一应用程序 例如两个用户使用两个不同的 Web 服务 每个都有自己的 在我的设置脚本中我想更改AppID and AppName基于用户的输入 例如我的默认值AppName Service App 应该改为AppN
  • Inno Setup 仅卸载部分组件

    我有一个通用的应用程序 例如媒体播放器 用于安装在同一文件夹中的每个不同的零售产品 即 C 程序文件 myapp 并且不同的内容 例如电影 都安装在同一个文件夹中 C 程序文件 myapp 电影 对于每个单独的安装 单独的零售产品 我只是创
  • 无法为 32 位 HKLM 设置注册表插入

    我想在 Inno setup 中创建一个带有子菜单项的上下文菜单 问题是 它在 64 位注册表 WoW6432Node 部分插入 HKLM 密钥 The 文档 http www jrsoftware org ishelp index php
  • 安装程序启动时间长 - 在 wpWelcome 之前添加对话框?

    我使用 Inno Setup 创建的安装程序大小约为 850 MB 包含约 7000 个文件和 890 个文件夹 未压缩大小为 1 98 GB 当开始安装过程时 之后Windows UAC 对话框出现后 安装程序的图标为空Taskbar约
  • 将 AppMutex 与静默 Inno Setup 一起使用

    我在 Inno Setup 脚本中使用 AppMutex 来确保产品在安装更新时不再运行 这基本上工作得很好 但是 当使用 verysilent 命令参数运行此设置时 会显示一个对话框 尽管非常安静 表明程序仍在运行 应该关闭 由于程序本身
  • 如何在 Inno Setup 中使用 GetVolumeInformation?

    我需要在使用 Inno Setup 创建的安装过程中获取驱动器号的卷序列号 我知道 DLL 函数可以导入到 Inno 中 但我对它还很陌生 并且在使其工作时遇到一些问题 我知道 kernel32 中的 GetVolumeInformatio
  • Inno Setup 无法导入 DLL

    我没有运气将 Delphi DLL 导入 Inno Setup Unicode 该DLL有一个简单的过程 procedure Foo stdcall begin end exports Foo 该 DLL 包含在安装程序源中 并添加到文件列
  • Inno Setup:如何根据代码更改语言文件

    我使用自己的语言文件 isl 而不是使用 Inno Setup 的默认语言文件 它允许我自定义一些消息 但现在 我想要每种语言文件有两个版本 一个用于首次安装 一个用于更新 但是 是否可以从代码中选择一个文件 如果是 该怎么做 也许有一些比
  • 从 Inno Setup 项目内部调用 MySQL

    我正在为一些使用 MySQL 的软件编写安装程序 我正在尝试运行 sql用于在安装时设置数据库的脚本 唉 我目前在执行它时遇到了很大的问题 这个问题似乎是由于这样一个事实而产生的 当你设置一条通往 sql文件内的 execute SOURC
  • Inno-Setup:在消息框中使用自己的按钮文本

    良好的 GUI 设计中的常见做法是不使用是 否消息框 而是为按钮提供真实名称 例如保存或丢弃 我们如何在显示的消息框中实现这一点MsgBox在 InnoSetup 中 至少对于我们在代码部分中显示的那些 The MsgBox http ww
  • Inno Setup 代码部分创建隐藏文件

    我正在处理 Inno Setup 项目 该项目正在使用SaveStringToFile函数在 Code 部分 我想将此文件设置为隐藏系统文件 但我无法找到有关如何实现此操作的信息 有任何想法吗 Inno Setup Pascal Scrip
  • 在 Inno Setup 中单击“下一步”按钮时验证自定义页面上的数据

    我已经设法获得一个基本脚本来显示向导 使用CreateInputFilePage 供用户识别我用来更新 XML 文件中某些设置的文件位置 但是 我想对所选文件的输入进行一些基本检查 而不是简单地接受用户提供的任何内容 例如 如果用户在内容无
  • 使用 Inno Setup 更快地创建安装程序

    当我在大量文件 gt 2GB 上运行 Inno Setup 时 需要很长时间才能运行 我相信它把时间花在了压缩上 这应该是 CPU 限制的 但它只使用了几个 CPU 有没有办法将其分散到 许多 更多核心 具体来说 我正在处理这个提升发布存储
  • 在启动设置而不是结束时提取文件

    我正在使用最新版本的 inno 它在安装过程中执行以下操作 执行依赖性检查以查看安装的内容 安装尚未安装的依赖项 net sql server directx 等 从 Files 部分安装应用程序和文件 wpReady 检查 SQL Ser
  • Inno Setup:当我在命令行中静默执行安装程序时,如何为安装程序提供序列号?

    正如标题中所述 我想知道当我在命令行中静默执行安装程序时 如何为安装程序提供序列号 iss Setup DefaultUserInfoSerial param serialnumber Default serial 命令行 setup ex

随机推荐

  • 使用 numpy 支持覆盖字典

    使用来自的基本思想如何 完美 覆盖字典 我编写了一个基于字典的类 该类应该支持分配点分隔键 即Extendeddict level1 level2 value level1 level2 value 代码是 import collectio
  • 如何在asp中使用数据库创建多语言网站

    如何在数据库存储翻译的aspx中创建多语言网站 我搜索了很多文章 但没有唯一的解决方案 有人有好主意或知道任何好文章吗 您将需要创建自己的数据库资源提供程序 参见这篇文章 http msdn microsoft com en us libr
  • 为什么我不能在 Go 中用一种类型的切片替换另一种类型?

    我正在尝试了解 Go 的类型转换规则 假设我们有这些接口 type woofer interface woof type runner interface run type woofRunner interface woofer runne
  • 如何获取自动刷新的日期?

    我正在尝试获取页面上刷新的日期 这样我就不必每天手动刷新它 我有这段代码 但它似乎不起作用 日期会显示 但日期更改时不会更新 作为参考 这是在 BrightSign 显示屏上使用的 谁能告诉我我做错了什么 我是一个 JavaScript 初
  • 从 Servlet 访问 SSL 私钥

    我在本地运行 Apache Tomcat 并使用 OpenSSL 安装了自签名证书 我还有一个正在运行的 servlet 我想做的是 Servlet 接收 POST 参数 并将回显使用服务器的 PrivateKey 签名的参数 也就是说 将
  • 运行 playbook 后访问 ansible playbook 结果

    我正在使用 ansible 脚本运行ansible pull在我看不到的远程计算机 客户端 上 我想确保 ansible playbook 成功执行然后应该发送摘要 ansible playbook 如果未成功执行 应发送失败的摘要 启用a
  • 来自客户端的 Instagram API

    我正在尝试从客户端调用 Instagram API 端点 我只能使用 JSONP 访问基于 GET 的端点 这Instagram 推荐 对于那些需要 POST 或 DELETE 的人 似乎没有启用 CORS 因此这些类型的 ajax 调用会
  • 如何等待齐射响应完成其在intentservice内的工作?

    与intentservice合作 在后台使用 Google Volley 获取7个Rss Feed链接的数据 并使用ResultReceiver获取结果 但我无法配置如何等待volley响应来完成触发标志的工作ResultReceiver显
  • 黑白 imageNamed 和 imageWithContentsOfFile 的区别 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 黑白有什么区别图像命名 and 带文件内容的图像在 Objective C 中 图片名称 imageNamed 缓存的是您的图像 您失去了对内存的控制 不能保证释放对象会真正释放
  • 通过构造函数参数 0 表达的不满足的依赖关系:没有类型的合格 bean - Spring boot

    我正在使用 Spring boot 来实现 Java 应用程序 其中一个控制器称为HealthCheckerController 定义在application包裹 HealthCheckerController java package a
  • 不可变类型的 ID

    我对可变对象和不可变对象之间的区别有点困惑 我尝试了以下代码块来查找对象的 id tuple1 Object1 Object2 print id tuple1 tuple2 Object1 Object2 print id tuple2 l
  • SQL 数据库项目:根据构建配置构建不同的脚本

    我想解决的问题是根据构建配置构建不同的脚本 假设我们有两个 SQL Server 实例 连接链接服务器的企业版 用于离线开发和单元测试的 LocalDb 版本 当 LocalDB 用本地表替换这些视图时 企业版具有链接服务器的视图 这些链接
  • Three.js:纹理全黑

    我有一个简单的盒子几何形状 我试图用纹理来装饰它 然而 我的盒子根本不显示 或者可能是 100 黑色 当前的这个问题是从这个问题 我已经更新了代码以反映给出的答案gaitat关于原来的问题 我写过另一个简单的测试站点来演示这个新问题 这是该
  • 将“Kendo.Mvc.UI.DataSourceRequest”类型的对象从 jquery 传递到 Mvc Action

    客观的 我想传递一个类型的对象Kendo Mvc UI DataSourceRequest到 Mvc 操作 以便我可以根据应用的排序和过滤从数据库获取结果 问题 障碍 当对象到达操作时 它会变为 null 我的控制器操作 public Ac
  • 如何上传多个文件到BlobStore?

    我正在尝试将表单中的多个文件上传到 BlobStore Form
  • 为 IE 包含 es6-promise 的优雅方式

    Since Promise is 不支持在所有 IE 版本中 我想让 IE 用户下载 HTML 格式的 pollyfill 然而 不支持条件注释在 IE 10 和 11 中 所以上面的代码在 IE 10 和 11 中不起作用 然后 微软提供
  • 如果颁发新的刷新令牌,旧的刷新令牌仍然有效吗?

    我的应用程序使用 Google 刷新令牌 从 Google 获取 access token 我在这里有两个问题 我知道 Google 刷新令牌 6 个月内不会过期 请参阅此处的文档 说我有一个刷新令牌refresh token old1 月
  • 使用后台线程不断从串行端口读取数据

    由于串行端口通信是异步的 我在涉及与 RS 232 设备通信的项目的早期就发现 我必须有一个后台线程不断读取端口接收的数据 现在 我使用 IronPython NET 4 0 因此我可以访问 NET 中内置的灵活 SerialPort 类
  • 在我的例子中,Mockito 验证函数被调用一次

    我在用Mockito编写我的测试用例 我有一个简单的类 其中包含一个函数countPerson boolean 我有兴趣测试 public class School School is a singleton class public vo
  • 使用 Inno Setup 在安装过程中删除和取消注册 DLL 文件

    In my Files 第 I 节有以下内容 Database password decryption for PTS importing Source PTSTools PTSTools bin x86 Release PTSTools