2013-02-20 15 views
2

j-interop을 사용하여 다음 wmic 명령을 수행하려고합니다.jinterop Win32_Process Create

wmic /NODE:192.168.0.195 /USER:Test /PASSWORD:password123 process call create "calc.exe" 

내 코드는 내 방식대로 작성했습니다. 세션을 만들고 WMI 서비스에 연결하여 파트가 처리되도록하는 두 가지 방법이 있습니다.

public void wmiExecute() throws JIException { 

    // Obtain Win32_Process and narrow it as IJIDispatch 
    Object[] params = new Object[] { 
     new JIString("Win32_Process"), 
     new Integer(0), 
     JIVariant.OPTIONAL_PARAM() 
    }; 
    JIVariant[] servicesSet = this._wbemServices.callMethodA("InstancesOf", params); 
    IJIDispatch wbemObjectSet = (IJIDispatch) JIObjectFactory.narrowObject(servicesSet[0].getObjectAsComObject()); 

    params = new Object[] { 
      "calc.exe", 
      JIVariant.OPTIONAL_PARAM(), 
      JIVariant.OPTIONAL_PARAM(), 
      new Integer(0), 
    }; 
    wbemObjectSet.callMethodA("Create", params); 
} 

나는

Caught Throwable: org.jinterop.dcom.common.JIException: Unknown name. [0x80020006] 
org.jinterop.dcom.common.JIException: Unknown name. [0x80020006] 

잘못 될 수 어떤 생각의 예외를 받고 계속? 미리 감사드립니다!

답변

3

가 여기에 솔루션입니다 ... 그냥 현재 실행중인 프로세스의 목록을 얻는 것이기 때문에 당신은 Win32_Process를 얻기 위해 instanceof를 사용하지 말아야

. 대신 "Get"을 사용하여 기본 Win32_Process를 얻어야합니다.

public void wmiExecute() throws JIException { 

    // Obtain Win32_Process and narrow it as IJIDispatch 
    Object[] params = new Object[] { 
     new JIString("Win32_Process"), 
     JIVariant.OPTIONAL_PARAM(), 
     JIVariant.OPTIONAL_PARAM() 
    }; 

    // Obtain the default Win32_Process 
    JIVariant[] service = this._wbemServices.callMethodA("Get", params); 

    // Convert it to a IJIDispatch object 
    IJIDispatch wbemObject = (IJIDispatch) JIObjectFactory.narrowObject(service[0].getObjectAsComObject()); 

    // Create input params 
    Object[] paramsCalc = new Object[] { 
      new JIString("calc.exe"), 
      JIVariant.OPTIONAL_PARAM(), 
      JIVariant.OPTIONAL_PARAM() 
    }; 

    // Create the calculator process 
    JIVariant[] results = wbemObject.callMethodA("Create", paramsCalc); 
}