gpt4 book ai didi

windows - 如果进程正在 Windows 2008 R2 64 位上运行,如何使用 Inno Setup 检查?

转载 作者:可可西里 更新时间:2023-11-01 12:29:34 26 4
gpt4 key购买 nike

我已阅读以下帖子。我的代码看起来完全一样,但不起作用:
Inno Setup Checking for running process

我从 http://www.vincenzo.net/isxkb/index.php?title=PSVince 复制了示例

但是这个例子也不起作用,即使我像这样更改代码:

[Code]
function IsModuleLoaded(modulename: AnsiString): Boolean;
external 'IsModuleLoaded@files:psvince.dll stdcall';

代码总是返回false(程序没有运行,即使它正在运行)。在 Windows 2008 R2 和 Windows 7 上测试。

事实上,我想检查 tomcat5.exe 是否正在运行。所以我认为我不能使用 AppMutex

我也看到了https://code.google.com/p/psvince/source/detail?r=5
但是我找不到关于该 DLL 兼容性的任何事实。

完整代码:

[Files]
Source: psvince.dll; Flags: dontcopy

[Code]
function IsModuleLoaded(modulename: AnsiString ): Boolean;
external 'IsModuleLoaded@files:psvince.dll stdcall';

function InitializeSetup(): Boolean;
begin
if(IsModuleLoaded( 'notepad.exe' )) then
begin
MsgBox('Running', mbInformation, MB_OK);
Result := false;
end
else
begin
MsgBox('Not running', mbInformation, MB_OK);
Result := true;
end
end;

最佳答案

您可以使用 WMI 和 Win32_Process .

尝试将此函数添加到您的 Inno Setup 脚本中。

function IsAppRunning(const FileName : string): Boolean;
var
FSWbemLocator: Variant;
FWMIService : Variant;
FWbemObjectSet: Variant;
begin
Result := false;
FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator');
FWMIService := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', '');
FWbemObjectSet :=
FWMIService.ExecQuery(
Format('SELECT Name FROM Win32_Process Where Name="%s"', [FileName]));
Result := (FWbemObjectSet.Count > 0);
FWbemObjectSet := Unassigned;
FWMIService := Unassigned;
FSWbemLocator := Unassigned;
end;

关于windows - 如果进程正在 Windows 2008 R2 64 位上运行,如何使用 Inno Setup 检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9941293/

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