Проблема как проверить работоспособность службы

Andreo Fadio

Старожил
Используется код:
Код:
function IsProcessRunning(FileName: String): Boolean;
var
  objSWbemLocator, objSWbemServices: Variant;
begin
  try
    objSWbemLocator:= CreateOleObject('WbemScripting.SWbemLocator');
  except
    ShowExceptionMessage;
    Exit;
  end;
  objSWbemServices:= objSWbemLocator.ConnectServer();
  objSWbemServices.Security_.ImpersonationLevel:= 3;
  Result:= (objSWbemServices.ExecQuery('SELECT * FROM Win32_Process WHERE Name="' + FileName + '"').Count > 0);
end;

Который выбивает ошибку на моменте подключения objSWbemLocator.ConnectServer() с ошибкой SWbemLocator не хватает включенных компонентов или служба не включена. Не у всех проходит такой вариант исполнения.
Как можно проверить такой момент (работоспособность до выполнения)?
 

Leserg

Участник
Который выбивает ошибку на моменте подключения objSWbemLocator.ConnectServer()
А если так:
objSWbemServices:= objSWbemLocator.ConnectServer('', 'root\cimv2');

Или посмотреть вариант реализации здесь.

Как можно проверить такой момент (работоспособность до выполнения)?
Статьи:
Testing WMI (Windows Management Instrumentation) Connectivity
WMI: Исправление ошибок, восстановление репозитория в Windows
 

Andreo Fadio

Старожил
А если так:
objSWbemServices:= objSWbemLocator.ConnectServer('', 'root\cimv2');
А что так? Ошибка только там где отключена служба или какие-то компоненты (это всякие сборки и оптимизаторы), у остальных все работает и так.


Что-то ни батник, ни powershell, ни сторонние программы не прельщяют.
 

Leserg

Участник
Просматривая этот вопрос на сайте Microsoft (документацию и различные обучалки) везде в примерах указано именно так, хотя и написано, что параметры являются опциональными. Потом попался пример на GitHub. Поэтому предложил сделать также. Но если "все работает и так" , то нет вопросов.

Что-то ни батник, ни powershell, ни сторонние программы не прельщяют.
Я не предлагаю их использовать. Нужно просто проверить - работает служба Winmgmt или нет. Например так.
 
Сверху