Installation 如何使用inno设置结束进程?
我想使用inno安装程序终止进程。我想在开始安装安装程序之前检查窗口是否打开 我可以通过搜索windows名称来执行此操作吗?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,
请帮助我编写一些示例代码来终止进程最好的选择是使用互斥体,以查看它是否仍在使用
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