首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程计算机上的Delphi Wmi查询

远程计算机上的Delphi Wmi查询
EN

Stack Overflow用户
提问于 2011-02-14 18:08:42
回答 1查看 3.1K关注 0票数 2

我们使用WmiSet在远程机器上执行Wmi查询。它在Delphi 2007中工作得很好,但目前还不能在Delphi XE上使用。

我找到了一些从前面的SO问题Use Wmi with Delphi中执行Wmi Queries的代码。Answer No. 5中提供的代码片段在我的本地机器上工作得很好,但是我需要知道是否可以在远程机器上执行Wmi查询。

即使我使用管理员凭据连接到远程计算机,也会收到EOleSysError: Access is denied异常。

你好,皮特。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-14 21:16:42

皮特。在使用WMI连接到远程计算机之前,必须对远程计算机中的指定用户启用DCOM访问。

请阅读这些文章,了解并解决使用WMI连接到远程计算机时出现的问题。

  • Securing a Remote WMI Connection
  • Connecting to WMI Remotely Starting with Windows Vista
  • Troubleshooting Error Code 80070005 - Access Denied (great page to find solution about connections problems)

另外,我在这里留下了一个更清晰的代码来连接到远程机器中的wmi。检查处理EOleException异常的部分以获取错误代码并找到问题的原因。

代码语言:javascript
复制
program WMIRemote;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;

procedure  GetWMIOSInfo(const RemoteMachine,User,Password : string);
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer(RemoteMachine, 'root\CIMV2', User, Password);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem','WQL',0);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
    while oEnum.Next(1, FWbemObject, iValue) = 0 do
    begin
        Writeln(FWbemObject.Name);
        //code
        FWbemObject:=Unassigned;
    end;
    FWbemObjectSet:=Unassigned;
end;

begin
 try
    CoInitialize(nil);
    try
      //GetWMIOSInfo('localhost','','');
      GetWMIOSInfo('192.168.52.2','Administrator','password');
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('Error Code %d ($%x) Msg : %s',[E.ErrorCode,E.ErrorCode, E.Message]));

    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Readln;
end.
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4990890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档