Chr*_*ach 13 windows inno-setup 32bit-64bit pascalscript
我看过以下帖子.我的代码看起来完全相同,但不起作用:
Inno Setup检查运行过程
我从http://www.vincenzo.net/isxkb/index.php?title=PSVince复制了这个例子
但是这个例子也不起作用,即使我改变了这样的代码:
[Code]
function IsModuleLoaded(modulename: AnsiString): Boolean;
external 'IsModuleLoaded@files:psvince.dll stdcall';
Run Code Online (Sandbox Code Playgroud)
代码总是返回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;
Run Code Online (Sandbox Code Playgroud)
RRU*_*RUZ 45
您可以使用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;
Run Code Online (Sandbox Code Playgroud)
小智 7
我没有足够的代表点来为RRUZ的优秀答案添加评论,所以我只想在这里添加.确保捕获异常,否则安装程序将无法访问无法访问该服务的用户.
try
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);
except
end;
Run Code Online (Sandbox Code Playgroud)
不幸的是,根据我的观察,psvince.dll 无法查询 64 位正在运行的进程,并且由于我不是它的开发人员,我不知道如何修复它以在 Windows x64 上工作。
我的解决方法是使用自制的命令行实用程序 processviewer.exe,
http://github.com/lextm/processviewer
这已在 Windows 7 x64 上的Touch Mouse Mate中进行了测试
| 归档时间: |
|
| 查看次数: |
13674 次 |
| 最近记录: |