打包的时候遇到了这样的需求:假似用户都是傻瓜                  式操作,如果更新安装程序的时候,之前的老程序还在运行这个时候如果你去提示让用户吧老程序手动退掉也不现实。

所以当遇到这种情况的时候能不能在更新安装程序上下手,在更新的时候就默认吧老程序杀掉(如果老程序在运行)。

答案是明确的inno setup 是可以这样的操作。

下面是转的文章,谢谢作者的分享。

==============================================================

最近用inno setup想做一个exe,可是在安装之前要停止正在运行的相应进程,可是发现它自身的方法不能满足要求,终于在网上找到了相应的资料,在这里总结一下,方便以后使用。

1:如果我只是单纯的想在安装之前判断一个进程是否存在,要引入psvince.dll这个dll,放在inno setup的安装目录下(与其他dll相同目录),代码如下:

[files]

 ; 安装前判断进程,dll文件放在inno的安装目录中
Source: compiler:psvince.dll; Flags: dontcopy noencryption //安装前判断是否有进程正在运行
function IsModuleLoaded(modulename: String ): Boolean;
external 'IsModuleLoaded@files:psvince.dll stdcall setuponly'; function InitializeSetup(): Boolean;
var
value: string;
IsAppRunning: boolean; begin
//check Diagnosis press
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;

2:如果我想在安装前结束掉某个进程,就要引入IsTask.dll了,放在inno setup的安装目录下(与其他dll相同目录),代码如下:

[Files]
Source: D:\FDisk\makeexe\fd\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
; 安装前判断进程,dll文件放在inno的安装目录中
Source: compiler:IsTask.dll; Flags: dontcopy noencryption [Code]
//安装前判断是否有进程正在运行,istask.dll文件与打包的exe文件一起
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;
begin
Result:= true;
if RunTask('进程名:如mysql.exe', false) then
begin
if MsgBox('安装程序检测到**正在运行!'#''#'点击 "是" 按钮将停止进程然后继续安装;'#''#'点击"否" 按钮将终止安装程序!', mbConfirmation, MB_YESNO) = IDYES then
begin
KillTask('进程名:如mysql.exe');
KillTask('mysqld.exe');
Result:= true;
end
else
Result:= false;
end
else
Result:= true;
end;

原文地址:https://blog.csdn.net/u011592169/article/details/11073065

inno setup 安装前判断进程是否存在,以及停止相应进程<转>的更多相关文章

  1. Inno Setup 安装前卸载原程序

    Inno Setup 安装前卸载原程序 分类: Install Setup 2013-02-02 15:53 2315人阅读 评论(0) 收藏 举报 很多時候我們需要在安裝文件之前卸載原有的程序而不是 ...

  2. Inno Setup 安装前卸载原程序(转)

    很多時候我們需要在安裝文件之前卸載原有的程序而不是覆盖安装,本文的code就是实现了这样的功能. 实现原理是:從注冊表'UninstallString'項中读取卸载信息,用Exec进行静默卸载. 下面 ...

  3. INNO setup安装卸载钱判断进程中是否在运行总结

    1.安装前判断进程中是否有程序在运行. [files] ; 安装前判断进程,dll文件放在inno的安装目录中Source: compiler:psvince.dll; Flags: dontcopy ...

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

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

  5. Inno Setup安装时不能关闭指定进程

    脚本由 Inno Setup 脚本向导 生成!; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define MyAppName "XX管理系统"#defi ...

  6. 一个比较完整的Inno Setup 安装脚本(转)

    一个比较完整的Inno Setup 安装脚本,增加了对ini文件设置的功能,一个安装包常用的功能都具备了. [Setup] ; 注: AppId的值为单独标识该应用程序. ; 不要为其他安装程序使用相 ...

  7. 一个比较完整的Inno Setup 安装脚本

    一个比较完整的Inno Setup 安装脚本,增加了对ini文件设置的功能,一个安装包常用的功能都具备了. [Setup] ; 注: AppId的值为单独标识该应用程序. ; 不要为其他安装程序使用相 ...

  8. Inno Setup 安装

    Inno Setup 安装 一.软件下载:http://www.jrsoftware.org/isdl.php#qsp 二.下载后,双击进行安装(包括inno Setup Compiler和Inno ...

  9. Inno Setup安装、卸载时判断是否程序正在运行

    var ErrorCode: Integer; IsRunning: Integer; // 安装时判断客户端是否正在运行 function InitializeSetup(): Boolean; b ...

随机推荐

  1. jQuery插件制作之全局函数用法实例

    原文地址:http://www.jb51.net/article/67056.htm 本文实例讲述了jQuery插件制作之全局函数用法.分享给大家供大家参考.具体分析如下: 1.添加新的全局函数 所谓 ...

  2. python之路——6

    王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594 复习 增dic['age'] = 21 dic.setfault()删popcleardel popitem ...

  3. tools、site

    notepad editer fiddler 一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的数据 ...

  4. Jmeter(二十五)Jmeter之系统函数

    都忘了Jmeter4.0已发布((*^▽^*))具体优化项还没体验,记录一下,传送门:http://jmeter.apache.org/download_jmeter.cgi Jmeter的系统函数已 ...

  5. [UE4]背景模糊

    被遮挡的都会被模糊,没被遮挡的不会模糊

  6. Abp.AutoMapper扩展(1) --static class AutoMapExtensions

    // 摘要:        //     Converts an object to another using AutoMapper library. Creates a new object    ...

  7. 第9章 应用层(3)_telnet协议和远程桌面协议RDP

    3.1 telnet简介 (1)telnet是一个简单的远程终端协议,也是因特网的正式标准.用户使用telnet连接到远程运行telnet服务的设备(可以是网络设备.比如路由器.交换机,也可以是操作系 ...

  8. C#语言时间

    string x = "abcdefg"; 定义字符串 int length = x.Length; 定义长度 string y = x.Substring(1, 2); 意思的从 ...

  9. 最精简的自定义.net 开发框架

    一. 通过自定义的HttpModule和HttpHandler,重写url,自定义路由规则,实现 Web API功能. 简单说 就是  请求路径 例如 service/method, 那么就指向当前应 ...

  10. Android 真机投影到PC端,真机投影工具;Vysor

    Vysor可以把Android真机投影到PC端,也就是电脑上:手机端和PC端课同步操作: Vysor是Chrome浏览器的插件,我们想要添加这个插件需要FQ: 从这里可以直接下载:Vysor