Как получить экземпляр SQL Server с WMI? - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь заставить работать приведенный ниже фрагмент:

function GetWMIstring: string;
var
  objWMIService : OLEVariant;
  colItems      : OLEVariant;
  colItem       : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;

  function GetWMIObject(const objectName: String): IDispatch;
  var
    chEaten: Integer;
    BindCtx: IBindCtx;//for access to a bind context
    Moniker: IMoniker;//Enables you to use a moniker object
  begin
    OleCheck(CreateBindCtx(0, bindCtx));
    OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));//Converts a string into a moniker that identifies the object named by the string
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));//Binds to the specified object
  end;

begin
  objWMIService := GetWMIObject('winmgmts:\\.\root\Microsoft\SqlServer\ComputerManagement');
  colItems      := objWMIService.ExecQuery('SELECT * FROM ServerSettings','WQL',0);
  oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
  while oEnum.Next(1, colItem, iValue) = 0 do
  begin
    Result:=colItem.Properties_.Item('<What should this be?>', 0); 
  end;
end;

Я получаю ошибку OLE с GetWMIObject ...

Фрагмент кода по этому вопросу работает нормально: Как я могу использовать WMI с Delphi без резкого увеличения размера файла приложения?

Однако я не могу понять, какие значения должны быть точно с фрагментом, который я предоставил, чтобы получить Установленный SQL Экземпляр на моем Local P C ...

...