zoukankan      html  css  js  c++  java
  • 如何运用inno在安装和卸载时提示用户结束进程?

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

    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;

  • 相关阅读:
    2019-2020-1 20175201 20175215 20175229实验五 通讯协议设计
    2019-2020-1 20175201 20175215 20175229实验四 外设驱动程序设计
    2019-2020-1 实验三-并发程序 20175215
    20175201 20175215 20175229 实验二 固件程序设计
    冲刺博客汇总
    2018-2019-2 20175215 实验五《网络编程与安全》实验报告
    Int和Integer(课上测试)
    MySort(选做)
    2019-2020-2 20175234 赵诗玥 《网络对抗技术》 Exp1 PC平台逆向破解
    2019-2020-2 20175234 赵诗玥《网络对抗技术》 Exp0 Kali安装
  • 原文地址:https://www.cnblogs.com/joean/p/4938095.html
Copyright © 2011-2022 走看看