gpt4 book ai didi

installation - Inno Setup 终止正在运行的进程

转载 作者:行者123 更新时间:2023-12-02 15:07:49 26 4
gpt4 key购买 nike

我已经实现了一种方法来查找进程(“iexplore.exe”)是否正在运行,现在我需要找到一种方法从 Inno Setup 中关闭它(终止进程)。

strProg := 'iexplore.exe';
winHwnd := FindWindowByWindowName(strProg);
MsgBox('winHwnd: ' + inttostr(winHwnd), mbInformation, MB_OK );
if winHwnd <> 0 then
retVal:=postmessage(winHwnd,WM_CLOSE,0,0);

上例中的消息框将始终返回 0,因此不会获取句柄。(示例中的WM_CLOSE常量已正确初始化)我需要另一种方法来做到这一点,并且希望一种不涉及编写执行此操作的 C++ DLL 的方法(我不精通 C++,我也许能够用 C# 编写 DLL,但是我不知道 Inno Setup 是否将与之互操作)。

这个 C# DLL 将获取进程列表,遍历进程名称,找到匹配项(==“iexplorer”),然后终止具有该名称的进程...但是我仍然希望找到一个更简单的解决方案这样我就不必与 Pascal 脚本进行互操作。

提前致谢!

最佳答案

使用Win32_Process的版本,您可以使用“notepad.exe”调用该过程:

const wbemFlagForwardOnly = $00000020;

procedure CloseApp(AppName: String);
var
WbemLocator : Variant;
WMIService : Variant;
WbemObjectSet: Variant;
WbemObject : Variant;
begin;
WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
WMIService := WbemLocator.ConnectServer('localhost', 'root\CIMV2');
WbemObjectSet := WMIService.ExecQuery('SELECT * FROM Win32_Process Where Name="' + AppName + '"');
if not VarIsNull(WbemObjectSet) and (WbemObjectSet.Count > 0) then
begin
WbemObject := WbemObjectSet.ItemIndex(0);
if not VarIsNull(WbemObject) then
begin
WbemObject.Terminate();
WbemObject := Unassigned;
end;
end;
end;

关于installation - Inno Setup 终止正在运行的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5545077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com