如何运用inno在安装和卸载时提示用户结束进程?
我尝试着写了一段,但是卸载段存在问题,请指点!
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
[Code]
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('MyProg.exe', false) then
begin
if
MsgBox('安装程序检测到 MyProg.exe 正在运行!'#13''#13'单击“是”按钮关闭 LockOn
程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask('MyProg.exe');
end
end;
function InitializeUninstall(): Boolean;
begin
Result:= true;
if RunTask('MyProg.exe', false) then
begin
if
MsgBox('安装程序检测到 MyProg.exe 正在运行!'#13''#13'单击“是”按钮关闭 LockOn
程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask('MyProg.exe');
end
end;
======================================================
======================================================
======================================================
用上面的代码,在卸载时判断进程的dll已经没有了,所以不能调用它的函数。其实安装和卸载时调用的dll是不同的。
这样修改代码应该可以:
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
[Code]
function RunTask1(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
function KillTask1(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall uninstallonly';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall uninstallonly';
function InitializeSetup(): Boolean;
begin
Result:= true;
if RunTask1('MyProg.exe', false) then
begin
if
MsgBox('安装程序检测到 MyProg.exe 正在运行!'#13''#13'单击“是”按钮关闭 LockOn
程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask1('MyProg.exe');
end
end;
function InitializeUninstall(): Boolean;
begin
Result:= true;
if RunTask('MyProg.exe', false) then
begin
if
MsgBox('安装程序检测到 MyProg.exe 正在运行!'#13''#13'单击“是”按钮关闭 LockOn
程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask('MyProg.exe');
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
end
end;
如何运用inno在安装和卸载时提示用户结束进程?的更多相关文章
- Inno Setup安装、卸载时判断是否程序正在运行
var ErrorCode: Integer; IsRunning: Integer; // 安装时判断客户端是否正在运行 function InitializeSetup(): Boolean; b ...
- SQL Server 2008 Express 安装或卸载时提示“重启计算机失败"的解决办法
安装或卸载SQL Server 遇到错误提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作.运行安装程序之前必须重新启动计算机.如下图: 解决办法: 1.在开始->运行中输入regedi ...
- SQL Server 2008 安装或卸载时提示“重启计算机失败"的解决办法(转)
安装或卸载SQL Server 遇到错误提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作.运行安装程序之前必须重新启动计算机.如下图: 解决办法: 1.在开始->运行中输入regedi ...
- Inno Setup 安装、卸载前检测进程或服务
[转载]Inno Setup 安装.卸载前检测进程或服务 (2015-04-24 17:37:20) 转载▼ 标签: 转载 原文地址:Inno Setup 安装.卸载前检测进程或服务作者:一去丶二 ...
- Inno Setup 安装前卸载原程序
Inno Setup 安装前卸载原程序 分类: Install Setup 2013-02-02 15:53 2315人阅读 评论(0) 收藏 举报 很多時候我們需要在安裝文件之前卸載原有的程序而不是 ...
- NSIS:安装、卸载时检查程序是否正在运行
原文 NSIS:安装.卸载时检查程序是否正在运行 如果我们要安装或升级的程序正在运行,文件肯定会替换不成功,以下代码可以提示用户结束正在运行的程序. 需要使用插件FindProcDLL.dll,下载路 ...
- [转]NSIS:安装、卸载时检查程序是否正在运行
原文链接 http://www.flighty.cn/html/bushu/20110402_115.html 如果我们要安装或升级的程序正在运行,文件肯定会替换失败,以下代码可以提示用户结束正在运行 ...
- NSIS安装或卸载时检查程序是否正在运行
转载:https://www.cnblogs.com/z5337/p/4766415.html 转载:https://www.gongzi.org/nsisbuildqqstop.html 转载:ht ...
- sqlserver 2008 卸载时提示 “重新启动计算机”失败
问题:sqlserver 2008 卸载时提示 “重新启动计算机”失败 解决办法: 1.打开注册表:开始->运行: regedit 2.找到HKEY_LOCAL_MACHINE\SYSTEM\C ...
随机推荐
- Objective-C(一简介)
Objective-C简介 通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言.它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统, ...
- go——beego的数据库增删改查
一直都不理解使用go语言的时候,为什么还要自己去装beego,以为使用go便可以解决所有的问题,结果在朋友的点拨下,才意识到: go与beego的关系就好比是nodejs与thinkjs的关系,因此也 ...
- [整][转]Invoke和BeginInvoke的使用
在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate. 一.为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是do ...
- oracle Redhat64 安装错误3
问题描述 /usr/bin/ld: cannot find -lxxx 其中xxx即表示函式库文件名称,其命名规则是:lib+库名(即xxx)+.so. 可能原因: 1 安装了,但相对应的lib版本 ...
- 53个要点提高PHP编程效率
1.如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. 2.$row[’id’] 的速度是$row[id]的7倍.3.echo 比 print 快,并且使用echo ...
- 如何在 Ubuntu 15.04 系统中安装 Logwatch
大家好,今天我们会讲述在 Ubuntu 15.04 操作系统上如何安装 Logwatch 软件,它也可以在各种 Linux 系统和类 Unix 系统上安装.Logwatch 是一款可定制的日志分析和日 ...
- 在JavaScript 自定义对象来模拟Java中的Map
直接看代码: //模拟一个Map对象 function Map(){ //声明一个容器 var container={}; //定义一个put方法,向容器中存值 this.put=function(k ...
- JDBC 连接池
数据库连接池(connection pool) JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接 ...
- IT公司100题-16-层遍历二元树
问题描述: 层遍历二叉树,同一层从左往右打印. 定义二元查找树的结点为: typedef struct BSTreeNode { int data; BSTreeNode *left; BSTreeN ...
- hihocoder 1236(2015北京网络赛 J题) 分块bitset乱搞题
题目大意: 每个人有五门课成绩,初始给定一部分学生的成绩,然后每次询问给出一个学生的成绩,希望知道在给定的一堆学生的成绩比这个学生每门都低或者相等的人数 因为强行要求在线查询,所以题目要求,每次当前给 ...