在Inno Setup中安装之前,执行自定义命令以关闭正在运行的进程

时间:2018-05-10 11:27:54

标签: inno-setup

Inno Setup创建的My Setup.exe在我尝试安装更新时检测到我的安装中的某个可执行文件当前正在运行。

我选择"自动关闭应用程序"然后按下一步。似乎Inno Setup会关闭此应用程序,但它并没有正确关闭它。

系统托盘图标消失但进程仍在运行。

我不知道Inno安装程序是如何尝试关闭此应用程序的,但它无法正常工作。

应用程序有一个参数/exitall,它会关闭此应用程序的所有实例,包括它自己。

在Inno安装程序检测到正在运行的应用程序之前运行Setup.exe时,有没有办法执行命令行命令?

1 个答案:

答案 0 :(得分:1)

使用CurStepChanged(ssInstall)执行你的" kill"命令:

procedure CurStepChanged(CurStep: TSetupStep);
var
  AppPath: string;
  ResultCode: Integer;
begin
  if CurStep = ssInstall then
  begin
    Log('Installing...');
    AppPath := ExpandConstant('{app}\MyProg.exe');
    if not FileExists(AppPath) then
    begin
      Log(Format('Application %s was not installed yet.', [AppPath]));
    end
      else
    begin
      Log(Format('Application %s is installed, running cleanup procedure...', [AppPath]));
      if not Exec(AppPath, '/exitall', '', SW_SHOWNORMAL, ewWaitUntilTerminated,
                  ResultCode) then
      begin
        Log('Failed to run cleanup procedure.');
      end;
    end;
  end;
end;

虽然标准方法是使用AppMutex directive来阻止安装程序在用户关闭应用程序之前继续进行。