j-Interop连接64位系统的WMI获取信息报错:java.lang.ArrayIndexOutOfBoundsException: 16

weixin_38098679 2017-11-30 06:11:59
 开发四年只会写业务代码,分布式高并发都不会还做程序员?->>>    package systeminfo.util; import java.net.UnknownHostException; import java.util.logging.Level; import org.jinterop.dcom.common.JIException; import org.jinterop.dcom.common.JISystem; import org.jinterop.dcom.core.IJIComObject; import org.jinterop.dcom.core.JIArray; import org.jinterop.dcom.core.JIComServer; import org.jinterop.dcom.core.JIProgId; import org.jinterop.dcom.core.JISession; import org.jinterop.dcom.core.JIString; import org.jinterop.dcom.core.JIVariant; import org.jinterop.dcom.impls.JIObjectFactory; import org.jinterop.dcom.impls.automation.IJIDispatch; import org.jinterop.dcom.impls.automation.IJIEnumVariant; public class WMIUtil {     private JIComServer m_ComStub = null;     private IJIComObject m_ComObject = null;     private IJIDispatch m_Dispatch = null;     private JISession m_Session = null;     private IJIDispatch m_WbemServices = null;     private static final String WMI_CLSID = "76A6415B-CB41-11d1-8B02-00600806D9B6";     private static final String WMI_PROGID = "WbemScripting.SWbemLocator";     private String m_Host = null;     private String m_Domain = "ROOT\\CIMV2";     private String m_Username;     private String m_Password;     public static void main(String[] args) {         WMIUtil wmiService = new WMIUtil("","192.168.9.9","Administrator","cloudsino");         wmiService.connect();// 系统信息         wmiService.query("SELECT * FROM Win32_ComputerSystem");// CPU信息         wmiService.query("SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name != '_Total'");// 内存信息         wmiService.query("SELECT * FROM Win32_PerfFormattedData_PerfOS_Memory");// 磁盘信息         wmiService.query("SELECT * FROM Win32_PerfRawData_PerfDisk_PhysicalDisk Where Name != '_Total'");         wmiService.disconnect();     }     public WMIUtil(String domain,String host,String username, String password) {         JISystem.setAutoRegisteration(true);         JISystem.getLogger().setLevel(Level.WARNING);         this.m_Host = host;         this.m_Domain = domain;         this.m_Username = username;         this.m_Password = password;     }     public void query(String strQuery) {         System.out.println("query:" + strQuery);         JIVariant results[] = new JIVariant[0];         try {             results = m_WbemServices.callMethodA("ExecQuery", new Object[] {                     new JIString(strQuery), JIVariant.OPTIONAL_PARAM(),                     JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM() });             IJIDispatch wOSd = (IJIDispatch) JIObjectFactory                     .narrowObject((results[0]).getObjectAsComObject());             int count = wOSd.get("Count").getObjectAsInt();             IJIComObject enumComObject = wOSd.get("_NewEnum")                     .getObjectAsComObject();             IJIEnumVariant enumVariant = (IJIEnumVariant) JIObjectFactory                     .narrowObject(enumComObject                             .queryInterface(IJIEnumVariant.IID));             IJIDispatch wbemObject_dispatch = null;             for (int c = 0; c < count; c++) {                 Object[] values = enumVariant.next(1);                 JIArray array = (JIArray) values[0];                 Object[] arrayObj = (Object[]) array.getArrayInstance();                 for (int j = 0; j < arrayObj.length; j++) {                     wbemObject_dispatch = (IJIDispatch) JIObjectFactory                             .narrowObject(((JIVariant) arrayObj[j])                                     .getObjectAsComObject());                 }                 String str = (wbemObject_dispatch.callMethodA("GetObjectText_",                         new Object[] { 1 }))[0].getObjectAsString2();                 System.out.println("(" + c + "):");                 System.out.println(str);                 System.out.println();             }         } catch (JIException e) {             e.printStackTrace();         }     }     public void connect() {         try {             m_Session = JISession.createSession(m_Domain, m_Username, m_Password);             m_Session.useSessionSecurity(false);             m_Session.setGlobalSocketTimeout(6000);             m_ComStub = new JIComServer(JIProgId.valueOf(WMI_PROGID), m_Host,m_Session);             IJIComObject unknown = m_ComStub.createInstance();             m_ComObject = unknown.queryInterface(WMI_CLSID);             m_Dispatch = (IJIDispatch) JIObjectFactory.narrowObject(m_ComObject                     .queryInterface(IJIDispatch.IID));             JIVariant results[] = m_Dispatch.callMethodA(                     "ConnectServer",                     new Object[] { new JIString(m_Host),                             JIVariant.OPTIONAL_PARAM(),                             JIVariant.OPTIONAL_PARAM(),                             JIVariant.OPTIONAL_PARAM(),                             JIVariant.OPTIONAL_PARAM(),                             JIVariant.OPTIONAL_PARAM(), 0,                             JIVariant.OPTIONAL_PARAM() });             m_WbemServices = (IJIDispatch) JIObjectFactory                     .narrowObject((results[0]).getObjectAsComObject());         } catch (JIException e) {             e.printStackTrace();             if (m_Session != null) {                 try {                     JISession.destroySession(m_Session);                 } catch (JIException e1) {                     e.printStackTrace();                 }             }         } catch (UnknownHostException e) {             if (m_Session != null) {                 try {                     JISession.destroySession(m_Session);                 } catch (JIException e1) {                     e1.printStackTrace();                 }             }         }     }     public void disconnect() {         try {             JISession.destroySession(m_Session);         } catch (JIException e) {             e.printStackTrace();         }     } }     报如下错误,有没有大神用过,给下解决办法. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16     at jcifs.util.Encdec.dec_uint32le(Encdec.java:90)     at ndr.NdrBuffer.dec_ndr_long(NdrBuffer.java:146)     at ndr.NetworkDataRepresentation.readUnsignedLong(NetworkDataRepresentation.java:64)     at org.jinterop.dcom.core.JIRemoteSCMActivator$RemoteCreateInstance.read(JIRemoteSCMActivator.java:642)     at ndr.NdrObject.decode(NdrObject.java:36)     at rpc.ConnectionOrientedEndpoint.call(ConnectionOrientedEndpoint.java:137)     at rpc.Stub.call(Stub.java:113)     at org.jinterop.dcom.core.JIComServer.init(JIComServer.java:645)     at org.jinterop.dcom.core.JIComServer.initialise(JIComServer.java:496)     at org.jinterop.dcom.core.JIComServer.<init>(JIComServer.java:429)     at systeminfo.util.WMIUtil.connect(WMIUtil.java:93)     at systeminfo.util.WMIUtil.main(WMIUtil.java:35)
...全文
192 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lozhyf 2021-04-28
  • 打赏
  • 举报
回复
搞定了吗,楼主,报错org.jinterop.dcom.common.JIException: Message not found for errorCode: 0xC0000001
weixin_38099556 2017-12-01
  • 打赏
  • 举报
回复
https://github.com/mynawang/soc-wmi

472

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧