Installation 如何使用inno设置结束进程?

Installation 如何使用inno设置结束进程?,installation,inno-setup,uninstallation,windows-applications,kill-process,Installation,Inno Setup,Uninstallation,Windows Applications,Kill Process,我想使用inno安装程序终止进程。我想在开始安装安装程序之前检查窗口是否打开 我可以通过搜索windows名称来执行此操作吗? 请帮助我编写一些示例代码来终止进程最好的选择是使用互斥体,以查看它是否仍在使用AppMutex运行。关闭它的一种方法是找到窗口句柄,然后发布一条简单的WM_关闭消息 还有其他选择,如和 有关更多信息,请参见。如果发现程序正在运行,我会提示用户关闭该程序 function CheckProcessRunning( aProcName,

我想使用inno安装程序终止进程。我想在开始安装安装程序之前检查窗口是否打开

我可以通过搜索windows名称来执行此操作吗?
请帮助我编写一些示例代码来终止进程

最好的选择是使用互斥体,以查看它是否仍在使用
AppMutex
运行。关闭它的一种方法是找到窗口句柄,然后发布一条简单的WM_关闭消息

还有其他选择,如和


有关更多信息,请参见。

如果发现程序正在运行,我会提示用户关闭该程序

function CheckProcessRunning( aProcName,
                              aProcDesc: string ): boolean;
var
  ShellResult: boolean;
  ResultCode: integer;
  cmd: string;
  sl: TStringList;
  f: string;
  d: string;
begin
  cmd := 'for /f "delims=," %%i ' + 
         'in (''tasklist /FI "IMAGENAME eq ' + aProcName + '" /FO CSV'') ' + 
         'do if "%%~i"=="' + aProcName + '" exit 1'; 
  f := 'CheckProc.cmd';
  d := AddBackSlash( ExpandConstant( '{tmp}' ));
  sl := TStringList.Create;
  sl.Add( cmd );
  sl.Add( 'exit /0' );
  sl.SaveToFile( d + f );
  sl.Free;
  Result := true;
  while ( Result ) do
  begin
    ResultCode := 1;
    ShellResult := Exec( f,
                         '',
                         d, 
                         SW_HIDE, 
                         ewWaitUntilTerminated, 
                         ResultCode );
    Result := ResultCode > 0;
    if Result and 
       ( MsgBox( aProcDesc + ' is running. This program must be closed to continue.'#13#10 + 
                 'Please close it and click Yes to retry or click No to cancel this installer.', 
                 mbConfirmation, 
                 MB_YESNO ) <> IDYES ) then
      Break;
  end;
  DeleteFile( d + f );
end;

在[UninstallRun]部分,您可以添加以下代码:

Filename: {sys}\taskkill.exe; Parameters: "/f /im MyProcess.exe"; Flags: skipifdoesntexist runhidden

一种不太复杂的方法是运行一个使用任务终止的

ie:如果你想在卸载之前杀死记事本

taskkill /IM notepad.exe

也许一个简单的互斥解决方案就足够了?向应用程序添加互斥体,然后使用
设置
部分中的
AppMutex
参数。begin Wnd:=FindWindowByWindowName('name');如果Wnd为0,则发送消息(Wnd,WM_CLOSE,0,0);结果:=True;。我试过这样做。它工作正常,但我想关闭托盘窗口。如何退出此窗口[UninstallRun]文件名:{cmd};参数:/c taskkill/f/im notepad.exe;Flags:runhidden。我可以这样做吗?不要直接杀死它,因为它会导致问题。使用隐藏窗口和FindWindow方法来通知它关闭。这是它的本意。总是友好地要求用户关闭应用程序;除当前版本的InitializeGlobals外;破坏它。为什么要[卸载运行]?OP希望在运行安装程序之前终止进程。卸载程序运行时未调用[UninstallRun]吗?
taskkill /IM notepad.exe