我尝试着写了一段,但是卸载段存在问题,请指点!

CODE

[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是不同的。

这样修改代码应该可以:

CODE

[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在安装和卸载时提示用户结束进程?的更多相关文章

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

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

  2. SQL Server 2008 Express 安装或卸载时提示“重启计算机失败"的解决办法

    安装或卸载SQL Server 遇到错误提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作.运行安装程序之前必须重新启动计算机.如下图: 解决办法: 1.在开始->运行中输入regedi ...

  3. SQL Server 2008 安装或卸载时提示“重启计算机失败"的解决办法(转)

    安装或卸载SQL Server 遇到错误提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作.运行安装程序之前必须重新启动计算机.如下图: 解决办法: 1.在开始->运行中输入regedi ...

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

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

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

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

  6. NSIS:安装、卸载时检查程序是否正在运行

    原文 NSIS:安装.卸载时检查程序是否正在运行 如果我们要安装或升级的程序正在运行,文件肯定会替换不成功,以下代码可以提示用户结束正在运行的程序. 需要使用插件FindProcDLL.dll,下载路 ...

  7. [转]NSIS:安装、卸载时检查程序是否正在运行

    原文链接 http://www.flighty.cn/html/bushu/20110402_115.html 如果我们要安装或升级的程序正在运行,文件肯定会替换失败,以下代码可以提示用户结束正在运行 ...

  8. NSIS安装或卸载时检查程序是否正在运行

    转载:https://www.cnblogs.com/z5337/p/4766415.html 转载:https://www.gongzi.org/nsisbuildqqstop.html 转载:ht ...

  9. sqlserver 2008 卸载时提示 “重新启动计算机”失败

    问题:sqlserver 2008 卸载时提示 “重新启动计算机”失败 解决办法: 1.打开注册表:开始->运行: regedit 2.找到HKEY_LOCAL_MACHINE\SYSTEM\C ...

随机推荐

  1. jQuery学习小结3——AJAX

    一.jQuery的Ajax方法 jQuery对Ajax 做了大量的封装,使用起来也较为方便,不需要去考虑浏览器兼容性.对于封装的方式,jQuery 采用了三层封装: 最底层的封装方法为——$.ajax ...

  2. PHP Mongodb 基本操作

    <?php include "config/config.inc.php";$host = $config['host'];$port = $config['port']; ...

  3. Windows安装配置php+memcached的方法

    Windows下Memcached的安装配置方法 1.将第一个包解压放某个盘下面,比如在c:\memcached. 2.在终端(也即cmd命令界面)下输入 'c:\memcached\memcache ...

  4. JAVA与指针

    首先,提个问题:JAVA中没有指针,JAVA中有指针,哪个一个对呢? 答:都对,JAVA中没有指针,因为我们不能对指针直接操作,像C++那样用->来访问变量. JAVA有指针,因为JDK中封装了 ...

  5. bzoj 1951: [Sdoi2010]古代猪文

    #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #defin ...

  6. HDU 3255 扫描线(立方体体积并变形)

    Farming Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  7. C++之函数fgetc和fputc、fgets和fputs、fread和fwrite、fscanf和fprintf用法小结

    #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; int ...

  8. comboBox绑定数据库、模糊查询

    实现: 一.绑定数据库 点击查询按钮,comboBox显示从数据库查到的某字段的一列数据 方法:在按钮的点击事件绑定数据库 private void button1_Click(object send ...

  9. NOIP 2013提高组day 1 T 1转圈游戏 快速幂

    描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推 ...

  10. 创建和运行shell脚本程序

    转载请标明http://www.cnblogs.com/winifred-tang94/ 要创建一个shell脚本程序,首先新建一个文本文件,然后在这个文本文件中按照shell编程规则输入shell命 ...