Inno Setup创建的My Setup.exe在我尝试安装更新时检测到我的安装中的某个可执行文件当前正在运行。
我选择"自动关闭应用程序"然后按下一步。似乎Inno Setup会关闭此应用程序,但它并没有正确关闭它。
系统托盘图标消失但进程仍在运行。
我不知道Inno安装程序是如何尝试关闭此应用程序的,但它无法正常工作。
应用程序有一个参数/exitall
,它会关闭此应用程序的所有实例,包括它自己。
在Inno安装程序检测到正在运行的应用程序之前运行Setup.exe时,有没有办法执行命令行命令?
答案 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来阻止安装程序在用户关闭应用程序之前继续进行。