Inno Setup中WMI服务异常判断

355 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

某些windows系统的WMI服务存在问题或不完整,在使用innosetup制作软件时,如果用到了服务模式运行一些程序,需要进行WMI服务是否可用的判断。以下为判断函数,其中的MsgBox为调试语句,可以自行去掉。

function IsAppRunning(const FileName : string): Boolean;\

var
FSWbemLocator: Variant;
FWMIService   : Variant;
FWbemObjectSet: Variant;
FSWbemLocator_type : TVarType;
FWMIService_type :  TVarType;
FWbemObjectSet_type : TVarType;
begin
Result := false;
try
FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator');
FSWbemLocator_type :=  VarType(FSWbemLocator);
if FSWbemLocator_type = varEmpty then
begin
MsgBox('xsz', mbError, mb_Ok);
MsgBox(SysErrorMessage(DLLGetLastError), mbError, mb_Ok);
MsgBox('haha', mbError, mb_Ok);
end
if FSWbemLocator_type = varNull then
begin
MsgBox('xsz', mbError, mb_Ok);
MsgBox(SysErrorMessage(DLLGetLastError), mbError, mb_Ok);
MsgBox('haha', mbError, mb_Ok);
end
FWMIService := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', '');
FWMIService_type :=  VarType(FWMIService);
FWbemObjectSet := FWMIService.ExecQuery(Format('SELECT Name FROM Win32_Process Where Name="%s"',[FileName]));
FWbemObjectSet_type :=  VarType(FWbemObjectSet);
Result := (FWbemObjectSet.Count > 0);
except
MsgBox('安装程序检测到你的WMI服务存在异常,请在安装完成后检查i2node各项服务是否正常启动', mbError, mb_Ok);
finally
FWbemObjectSet := Unassigned;
FWMIService := Unassigned;
FSWbemLocator := Unassigned;
end;
end;