Jacob连接到远程计算机以获得WMI支持

时间:2013-07-10 14:30:56

标签: java wmi jacob

我正在尝试使用java和Jacob连接到远程计算机,以获取有关远程计算机的一些WMI信息。

对于localhost我使用下面的代码,它工作正常。

    String host = "localhost";
    String connectStr = String.format("winmgmts:\\\\%s\\root\\CIMV2", host);

    ActiveXComponent axWMI = new ActiveXComponent(connectStr);
    // other code to get system information

但是如果我将localhost更改为另一个ip / hostname,我收到以下错误:

Exception in thread "main" com.jacob.com.ComFailException: Can't find moniker
    at com.jacob.com.Dispatch.createInstanceNative(Native Method)
    at com.jacob.com.Dispatch.<init>(Dispatch.java:99)
    at com.jacob.activeX.ActiveXComponent.<init>(ActiveXComponent.java:58)
    at easyticket.classes.WmiExtended.main(WmiExtended.java:28)

并且抛出异常的行是:

ActiveXComponent axWMI = new ActiveXComponent(connectStr);

修改

我尝试使用WbemScripting

传递用户名/密码
String host = "192.168.7.106";
ActiveXComponent axWMI = new ActiveXComponent("WbemScripting.SWbemLocator");
axWMI.invoke("ConnectServer", new Variant(host+",\"root\\cimv2\",\"username\",\"password\""));

但是我收到了这个错误:

Exception in thread "main" com.jacob.com.ComFailException: Invoke of: ConnectServer
Source: SWbemLocator
Description: The RPC server is unavailable. 

我该如何解决?如何通过用户名/密码,如果需要域???

我正在使用Windows 8而我正在尝试连接到win8 / win7 / winxp / win2003server计算机。

1 个答案:

答案 0 :(得分:4)

经过一些搜索,我设法解决了我的问题...

如果有人需要,这是代码。

ActiveXComponent wmi = new ActiveXComponent("WbemScripting.SWbemLocator");        

  Variant variantParameters[] = new Variant[4];
  variantParameters[0] = new Variant(_IPADDRESS);
  variantParameters[1] = new Variant("root\\cimv2");
  variantParameters[2] = new Variant("username");
  variantParameters[3] = new Variant("password");     
  ActiveXComponent axWMI;
try
{
    Variant conRet = wmi.invoke("ConnectServer", variantParameters);        
    axWMI = new ActiveXComponent(conRet.toDispatch());
}catch(ComFailException e)
{
    axWMI = null;
}
if (axWMI == null)
    return false;