需求

最近用 Inno Setup 做一个exe,可是在安装之前要停止正在运行的相应进程或者在卸载之前要停止正在运行的相应进程,可是发现它自身的方法不能满足要求,最后经过度娘的耐心帮助下终于在网上找到了相应的资料,在这里总结一下,方便以后使用。

具体代码

如果只是在安装之前判断一个进程是否存在,需要要引入 psvince.dll ,放在Inno Setup的安装目录下,代码如下:

[Files]

; 安装前判断进程, psvince.dll 文件放在Inno Setup的安装目录下

Source: compiler:psvince.dll; Flags: dontcopy noencryption

[Code]

;安装前判断是否有进程正在运行

function IsModuleLoaded(modulename: String ): Boolean;
external 'IsModuleLoaded@files:psvince.dll stdcall setuponly'; function InitializeSetup(): Boolean;
var
value: string;
IsAppRunning: boolean; begin
value := ExpandConstant('{cm:DiagnosisRunning}');
Result:= true;
IsAppRunning:= IsModuleLoaded('进程名:如mysql.exe');
while IsAppRunning do
begin
if MsgBox('**进程正在运行,请先关闭它!', mbConfirmation, MB_OKCANCEL) = IDOK then
IsAppRunning:= IsModuleLoaded('进程名:如mysql.exe')
else
begin
IsAppRunning:= false;
Result:= false;
end;
end;
end;

安装、卸载前检测进程运行情况并关闭相应进程,代码如下:

[Files]

;需要在Files下加上这句

Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden

[Code]

;安装前判断是否有进程正在运行,istask.dll文件放到inno setup安装目录下

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload'; function InitializeSetup(): Boolean;
var
ResultStr: String;
ResultCode: Integer;
begin
Result:= true;
if RunTask('{#MyAppExeName}', false) then
begin
if MsgBox('安装程序检测到 {#MyAppName} 正在运行!'#''#'单击“是”按钮关闭程序;'#''#'单击“否”按钮退出安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask('{#MyAppExeName}');
Result:= true;
end
else Result:= true;
end;

;卸载前判断进程是否在运行,istask.dll文件和打包的exe文件放在一起

function RunTaskU(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTaskU(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly'; function InitializeUninstall(): Boolean;
begin
Result:= true;
if RunTaskU('{#MyAppExeName}', false) then
begin
if MsgBox('卸载程序检测到 {#MyAppName} 正在运行!'#''#'单击“是”按钮关闭程序;'#''#'单击“否”按钮退出卸载!', mbConfirmation, MB_YESNO) = IDYES then
KillTaskU('{#MyAppExeName}');
Result:= true;
end
else Result:= true;
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
end;

补充
如果用的是Unicode版本的 Inno Setup ,上面的代码不能起到检测进程、杀进程的功能。
解决方法:
将 string 换成 ansistring 就可以了

Demo下载
需要相关的代码和 istask.dll 的小伙伴们可以在此下载
https://download.csdn.net/download/qq_36190858/10836877

需要相关的代码和 psvince .dll 的小伙伴们可以在此下载
https://download.csdn.net/download/qq_36190858/10853091

Inno Setup 中文帮助文档
https://download.csdn.net/download/qq_36190858/10836946

Inno Setup 系列之安装、卸载前检测进程运行情况并关闭相应进程的更多相关文章

  1. Inno Setup 系列之先卸载之后再安装

    需求使用Inno Setup打包程序之后,很多时候我们需要在安装文件之前卸载原有的程序而不是覆盖安装,本文的Code就是实现了这样的功能.如果想要在安装前先卸载,那么需要加下面代码,需要注意的是双星号 ...

  2. Inno Setup 系列之安装、卸载时调用bat

    需求 想在安装的时候调用install.bat,在卸载的时候调用uninstall.bat 解决 可以这样写 Inno Setup 的脚本: [Setup] ; NOTE: The value of ...

  3. Inno Setup命令行安装卸载参数

    安装命令行参数安装程序接受可选的命令行参数.这些对于系统管理员以及其它程序调用安装程序时有用./SP- 在安装开始时禁用“这将安装... 你想继续吗?”的提示,当然,如果 [Setup] 段的指令 D ...

  4. Inno Setup 安装、卸载前检测进程或服务

    [转载]Inno Setup 安装.卸载前检测进程或服务 (2015-04-24 17:37:20) 转载▼ 标签: 转载   原文地址:Inno Setup 安装.卸载前检测进程或服务作者:一去丶二 ...

  5. inno安装卸载时检测程序是否正在运行卸载完成后自动打开网页-代码无效

    inno安装卸载时检测程序是否正在运行卸载完成后自动打开网页-代码无效 inno setup 安装卸载时检测程序是佛正在运行卸载完成后自动打开网页-代码无效 --------------------- ...

  6. 使用Inno Setup Compiler制作安装软件包

    前言 项目开发完成之后,需要程序打包发行,本文使用Inno Setup工具制作安装软件包. 系统环境 系统:win7_x64 工具:Inno Setup Complier 实现步骤 1.下载安装Inn ...

  7. Inno Setup打包之先卸载再安装

    使用Inno Setup打包程序之后,如果想要在安装前先卸载,那么需要加下面代码,需要注意的是红色标注的改为你们自己的.网上看到有些说_is1前面用AppName,但是我这边验证不行. [Setup] ...

  8. Inno setup中定制安装路径

    我的程序修改了安装界面,所以我的界面中提供了更改安装路径的方法. 用户修改后的路径会被传回inno setup脚本,脚本中需要做的事情如下: 1,写一个函数,来返回新的安装路径,如: function ...

  9. Inno Setup添加中文安装语言文件

    如果你不添加中文安装语言文件,你编译生成的安装包的语言是不会有中文. 一,打开软件安装目录下的Languages文件夹下,有如下好多文件,可是就是没有Chianese.isl. 好了,你只需要随便拷贝 ...

随机推荐

  1. Adobe Premiere Pro CC ------ 快捷键

    ctrl + ~:全屏 Esc:退出全屏

  2. xtrabackup备份MySQL

    mysql备份之xtrabackup(建议用来备份innodb) 下载地址:https://www.percona.com/downloads/XtraBackup/ 安装xtrabackup [ro ...

  3. Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException

    今天在学习spring 框架的时候看着,很简单.但是在真正开始做的时候发现,异常一个接着一个,整的肚子都被搞大了. Exception in thread "main" org.s ...

  4. 【Maven】安装配置、目录结构、配置文件、常见命令

    1.下载配置maven步骤 a.windows下配置jdk的系统环境变量:java_home b.windows下配置maven的系统环境变量:maven_home或者m2_home c.window ...

  5. CentOS下设置vim的tab键为4格

    # vim /etc/vimrc 在最后一行添加 set softtabstop=4 或者set tabstop=4 或者在~/.vimrc中添加也可以 没有~/.vimrc文件可以创建一个 另: s ...

  6. postgresql 常用速查

    中文资料 中文资料 /**gp中的基本sql语法**/ --删除表 drop table testtb; --创建表 CREATE TABLE testtb ( id integer, "n ...

  7. Parent Proxy 和 Origin Server配置学习

    Parent Proxy Configuration proxy.config.http.parent_proxy_routing_enable 开启/关闭parent caching: proxy. ...

  8. Mybatis 学习总结

    1 Mybatis入门 1.1 单独使用jdbc编程问题总结 1.1.1 jdbc程序 public static void main(String[] args) { Connection conn ...

  9. elasticsearch核心知识梳理

    https://blog.csdn.net/laoyang360/article/details/52244917

  10. js 运动框架及实例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...