【Inno Setup运行exe或者调用DLL接口】

2023-10-27

@Inno Setup卸载分享

对于ISS脚本使用感悟分享

	最近有个任务用到了ISS的打包脚本,其中一个需求就是在卸载exe时能够在卸载过程中运行一个EXE或者调用一个DLL接口去完成某项任务的功能。经过调研、学习简单分享一下。

1、EXE调用:

以该方式实现功能需要考虑两点:

	1、在exe进行相关功能实现时,放在什么地方好。
	2、exe在执行完相关任务后会不会造成进程残留问题,从而使得整体卸载任务失败。

经过调研发现可以将功能实现的逻辑封装好接口,在exe的类构造里实现,同时该exe如果没有其他的特殊处理的话,其将在任务结束后进程将释放。
exe实现逻辑简单在这里不在叙述,重点讲一下iss脚本中如何调用执行exe。

Inno Setup中的ShellExec
官方给出的接口定义为:

function ShellExec(
                     const Verb,
                     Filename,
                     Params, 
                     WorkingDir: String;
                     const ShowCmd: Integer;
                     const Wait: TExecWait;
                     var ErrorCode: Integer): Boolean;

参数Verb 表示执行的动作,例如open,注意是字符串"open"。
参数Filename表示要执行的文件名称,可以是exe或者其他。
参数Param表示一个要执行的命令,可以是exe或者一个带路径和属性的exe
参数WorkingDir表示一个工作路径。
后续三个参数分别是是否展示命令、等待和一个错误码。

熟悉完官方接口以后根据我的使用特性我的使用方式将是:打开一个进程完成我的某些功能具体实现如下:

ShellExec('open','我的exe','','',SW_HIDE,ewWaitUntilTerminated,ErrorCode);

代码具体的含义就是再卸载的时候隐藏的运行一个东西去完成某项任务。

Inno Setup 里面调用DLL接口

在Inno Setup里面调用DLL的某个接口首先需要DLL向外界暴露一个可用的接口。

DLL接口封装:
extern “C” X_API int STDCALL APP();
APP是封装的接口,()里面可以选择是否带有参数。

Inno Setup里面接口导出有两种方式:有返回值和无返回值两种

1、function  ExitProcess(exitCode: integer): Integer; external 'ExitProcess@kernel32.dll stdcall';
2、procedure BtnSetChecked(h:HWND; Value:boolean); external 'BtnSetChecked@{tmp}\botva2.dll stdcall delayload';

funtion 表示有返回值,ExitProcess表示函数名称 ()里表示参数,:后面是函数返回类型,exeternal表示接口导出的源,即DLL里的函数名称@路径+DLL名称和导出的类型为stdcall,还可以表明属性比如什么时候调用,例如delayload延时加载等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Inno Setup运行exe或者调用DLL接口】 的相关文章

  • 遍历后加快数组查找速度?

    我有一个123MB大的int数组 它基本上是这样使用的 private static int data new int 32487834 static int eval int c int p data c 0 p data p c 1 p
  • MVC。网络错误:初始化字符串的格式不符合从索引 0 开始的规范

    我的连接字符串是
  • 求 a 范围内的 pow(a^b)modN

    对于给定的b and N以及一系列a say 0 n 我需要找到ans 0 n 1 where ans i 没有a s为此pow a b modN i 我在这里搜索的是可能的重复pow a b modN对于一系列a 以减少计算时间 例子 i
  • 获取当前用户的 NetworkCredential (C#)

    我正在尝试从控制台应用程序调用 Web 服务 并且我需要向客户端提供System Net NetworkCredential object 是否有可能创建一个NetworkCredential启动应用程序的用户的对象而不提示输入用户名 密码
  • 在 2 个 .c 文件之间共享函数

    dir1有dir2 file1 c和file1 h dir2 有 file2 c 现在 如果我想在 file2 c 中访问 file1 c 中定义的函数 我需要在 file1 h 中声明它并在 file2 c 中包含 file1 h 这是一
  • 如何将 CroppedBitmap 转换为 BitmapImage

    我正在尝试将 CroppedBitmap 转换为 BitmapImage 编辑 不使用内存流 我尝试过直接转换它 似乎这不是一个选择 这应该没那么难 我正在尝试剪切 BitmapImage 的一部分 并创建一个仅包含新裁剪的 Bitmap
  • 在异步方法中使用时 HttpClient 标头被清空

    我正在使用 NET Framework 4 6 1 我的 Web api 中有一个控制器 其中有静态 HttpClient 来处理所有 http 请求 在 IIS 上托管我的应用程序后 大约每月一次 我的应用程序的所有传入请求都会出现以下异
  • 指向指针的指针和指向二维数组的指针之间的区别

    如果我有一个二维数组 B 定义为 int B 2 3 1 3 5 2 4 6 Is int p B与 一样int p 3 B int f B printf d f 1 gives 5作为输出 同时printf d f 给出 1 作为答案 为
  • MVVM 同步集合

    是否有一种标准化方法可以将 Model 对象集合与 C 和 WPF 中匹配的 ModelView 对象集合同步 我正在寻找某种类 可以使以下两个集合保持同步 假设我只有几个苹果 并且可以将它们全部保存在内存中 换句话说 我想确保如果我将 A
  • 使用私有构造函数的 C# 单元测试类?

    好吧 我刚刚收到一个作业 我必须对具有私有构造函数的类执行单元测试 现在 当所有方法也都是非静态时 我该如何在不初始化类的情况下进行单元测试 有什么方法可以对具有私有构造函数的类进行单元测试 无需反射 如果您无法将类公开 您仍然可以通过以下
  • 如果 .txt 文件不存在,则创建一个,如果存在则追加新行

    我想创建一个 txt 文件并写入它 如果该文件已经存在 我只想添加更多行 string path E AppServ Example txt if File Exists path File Create path TextWriter t
  • 测试从 ComboBox 派生的自定义控件

    我创建了一个从 ComboBox 派生的控件 并希望对其行为进行单元测试 但是 它在我的单元测试中的行为似乎与实际应用程序中的行为不同 在实际应用程序中 Combobox DataSource 属性和 Items 同步 换句话说 当我更改
  • 如何在 WCF 中反序列化自定义 SOAP 标头?

    我正在尝试向通过 WCF 的所有 SOAP 请求添加自定义标头 我发现这篇精彩的文章 http blogs msdn com b mohamedg archive 2012 10 21 adding custom soap headers
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • 如何“全局”捕获对象实例中引发的异常

    我目前正在编写一个 winforms 应用程序 C 我正在使用企业库异常处理块 遵循我所看到的相当标准的方法 IE 在 Program cs 的 Main 方法中 我已将事件处理程序连接到 Application ThreadExcepti
  • 嘲笑会员用户

    我目前正在开发一个 asp net mvc 2 应用程序 它使用默认的 SqlMembershipProvider 进行身份验证 我已经实现了一个控制器方法 通过调用读取当前用户的 ProviderUserKeyMembership Get
  • 如何在Windows Azure上调用ffmpeg.exe转换音频文件?

    我在 Windows Azure 上运行 Web 角色来接收 AAC 音频文件 通过 base64 字符串上传 并将它们存储到 blob 中 现在效果很好 接下来 我还必须将它们转换为 MP3 并将 MP3 存储到 blob 中 我决定使用
  • 是否有理由为什么用 XmlInclude 修饰的基类在序列化时仍然会抛出类型未知的异常?

    我将简化代码以节省空间 但所提供的内容确实说明了核心问题 我有一个类 它的属性是基类型 有 3 个派生类可以分配给该属性 如果我将任何派生类分配给容器并尝试序列化容器 XmlSerializer 会抛出可怕的错误 类型 x 不是预期的 使用
  • 链接错误:xxx 已在 *****.LIB 中定义:: 究竟出了什么问题?

    Problem 我正在尝试使用一个名为DCMTK http dicom offis de dcmtk它使用了一些其他外部库 zlib libtiff libpng libxml2 libiconv 我已经从同一网站下载了这些外部库 LIB
  • 矩阵行列式算法 C++

    我是编程新手 我一直在寻找一种找到矩阵行列式的方法 我在网上找到了这段代码 但我很难理解这里的算法 我对递归的基础没有问题 但继续和主循环我很难理解 非常感谢任何可以向我解释该算法的人 int determ int a MAX MAX in

随机推荐

  • 2020 MCM Weekend 2 Problem C,2020美赛C题——完整版题目

    文章目录 Problem C A Wealth of Data Problem Requirements Glossary Data Set Definitions Problem C A Wealth of Data Problem In
  • 测试开发岗需要学习什么样的技能才能满足需求?也许通过阅读各个互联网大厂的JD你会更加清楚

    目录 前言 各大互联网厂关于测试开发的要求 实习 测试开发实习生 测试中心 B站 测试开发实习生 商业技术部 B站 测试开发实习生 直播 B站 测试开发工程师 实习 阿里 游戏测试开发工程师 实习 阿里 测试开发工程师 教育业务 实习 字节
  • 时间序列之指数平滑法(Exponential Smoothing)

    统计中 预测方法除了利用多个影响因素建立回归模型来做预测外 在影响因素复杂 或者是没办法得到相关影响因素的数据信息时 回归模型就无能为力了 如果数据是时间序列上的值 在时间上可能呈现一定的稳态或者规律 利用过去时间区间的值来预测未来值 指数
  • 关于Win2008系统DNS服务器安装配置操作教程

    DNS是因特网的一项核心服务 它作为可以将域名和IP地址相互映射的一个分布式数据库 能够使人更方便的访问互联网 而不用去记住能够被机器直接读取的IP 中文全称 网络协议 地址数串 在win2008系统中要成功安装DNS服务器才能够正常的连接
  • Python工程师的发展前景如何?薪资高吗?5点给你分析齐全

    根据网上的人爆料 2020 互联网大厂校招硕士生的薪资情况 和美团今年的校招信息发布 也是引起一波热潮 许多人看到这些薪资都会感叹一声 那真正处于技术岗位的人员又是另一种看法 同时也激起了许多人想学编程的想法 而目前较为火热的Python也
  • 可视化翻转教学python

    目录 第1关 绘制折线图 第2关 绘制正弦曲线 第3关 绘制指定线型 颜色和标记的正弦曲线 第4关 定义绘制正余弦函数曲线的函数 第5关 绘制坐标轴并设置范围 第1关 绘制折线图 显示绘制结果 plt show 用于显示绘制的结果 无参数
  • 华为OD机试 - 报数问题(Java)

    题目描述 有n个人围成一圈 顺序排号为1 n 从第一个人开始报数 从1到3报数 凡报到3的人退出圈子 问最后留下的是原来第几号的那位 输入描述 输入人数n n lt 1000 输出描述 输出最后留下的是原来第几号 用例 输入 2 输出 2
  • PHP 密码长度至少为8,且必须包含大小写字母/数字/符号任意三者组合

    密码长度至少为8 且必须包含大小写字母 数字 符号任意三者组合 public function rexCheckPassword pwd 12345678aaA 8 20 位 字母 数字 字符 密码必须包含大小写字母 数字 符号任意两者组合
  • 程序员必知的设计模式七大原则

    文章目录 设计模式的目的 1 单一职责原则 1 1 单一职责原则注意事项和细节 2 接口隔离原则 2 1 接口隔离原则例子 3 依赖倒转原则 3 1 什么是依赖 3 2 依赖关系传递的三种方式 1 接口传递 依赖 2 构造方法传递 组合 3
  • 用U深度启动U盘清除系统登入密码

    先添加一块硬盘 修改启动顺序 选择windows密码破解工具 选择选项1 出现了许多硬盘 一个一个去试SAM在那个硬盘 最后发现在硬盘2 出现以下界面 选择第一个用户 按y键保存并退出 在按esc键一直退到以下界面 输入r退出关闭计算机 把
  • Pytorch中常见transform的使用

    本次实验练习了pytorch中数据的读取 Dataset类的使用 以及transform模块的使用 一 Pytorch简介 PyTorch是一个开源的Python机器学习库 基于Torch 用于自然语言处理等应用程序 2017年1月 由Fa
  • python实战因子分析和主成分分析

    机器学习中 因子分析和主成分分析是模型降维的两种最常用方法 因子分析基础概念 因子分析是一种统计方法 可用于描述观察到的相关变量之间的变异性 即潜在的未观察到的变量数量可能更少 称为因子 例如 六个观察变量的变化可能主要反映了两个未观察 基
  • 剖析vue常见问题(四)之vue中的diff算法

    背景 首先diff算法不是vue的专属 只要采用虚拟dom的框架基本都会采用diff算法 那么为什么要采用diff算法呢以及diff算法的好处是什么呢 我们还以vue为例 从源码层面做下分析 分别说明一下diff算法的必要性 src cor
  • windows下MySQL免安装版配置教程mysql-5.7.23-winx64.zip版本

    windows下MySQL免安装版配置教程mysql 5 7 23 winx64 zip版本 上一篇我们讲了MySQL5 6 41免安装版的配置教程 5 7版本的MySQL的配置会有些许差异 第一步 下载MySQL 官网下载mysql 5
  • 总结:那些热门的开源游戏服务器框架,还不看你就out了

    前言 作为一名业内资深的游戏开发人员 经常会遇到实习的新同事在工作中会问到这样的问题 工作中到底有哪些开源游戏服务器框架 该去值得学习呢 囊括到node js java C golang c python 等技术栈有各种各样的游戏框架 本文
  • Hyperledger- Fabric环境搭建

    Hyperledger Fabric环境搭建 前言 这篇主要记录一下我搭建fabric开发环境的过程以及遇到的各种坑 一开始我是用windows 10家庭版进行配置的 然后照着官方文档的步骤进行 但是遇到了一系列困难 最终还是由于一个无法解
  • 手机连接服务器数据库文件,手机连接服务器数据库文件在哪里

    手机连接服务器数据库文件在哪里 内容精选 换一换 本章节适用于MRS 3 x之前版本 Loader支持以下多种连接 每种连接的配置介绍可根据本章节内容了解 obs connectorgeneric jdbc connectorftp con
  • C++智能指针详解(共享指针,唯一指针,自动指针)

    前言 智能指针在C 11中引入 分为三类 shared ptr 共享指针 unique ptr 唯一指针 auto ptr 自动指针 一 共享指针 几个共享指针可以指向同一个对象 每当shared ptr的最后一个所有者被销毁时 关联对象或
  • 300行Lisp根据语法和词法生成解析器

    1 概要 无 作者自闭中 2 代码 defun make token class name data list class name data defun make string scanner scanner spec lambda st
  • 【Inno Setup运行exe或者调用DLL接口】

    Inno Setup卸载分享 对于ISS脚本使用感悟分享 最近有个任务用到了ISS的打包脚本 其中一个需求就是在卸载exe时能够在卸载过程中运行一个EXE或者调用一个DLL接口去完成某项任务的功能 经过调研 学习简单分享一下 1 EXE调用