Bru*_*zic 3 installation inno-setup kill
我已经实现了一种方法来查找进程(“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);
Run Code Online (Sandbox Code Playgroud)
上面示例中的消息框将始终返回 0,因此永远不会获得句柄。(WM_CLOSE示例中的常量已正确初始化)我需要另一种方法来做到这一点,希望这种方法不涉及编写执行此操作的 C++ DLL(我不精通 C++,我可能能够在 C# 中编写一个 DLL ,但我不知道 Inno Setup 是否会与之互操作)。
这个 C# DLL 将获取进程列表,遍历进程的名称,找到匹配项(==“iexplorer”),然后终止具有该名称的进程......但是我仍然希望找到一个更简单的解决方案,以便我不必与 Pascal 脚本互操作。
提前致谢!
使用 的版本Win32_Process,您可以使用 ie '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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9887 次 |
| 最近记录: |