jinterop Win32_Process Create
Я пытаюсь выполнить следующую команду wmic, используя j-interop.
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]
Есть идеи, что может быть не так? Заранее спасибо!
1 ответ
Решение
Вот решение...
Вы не должны использовать InstanceOf для получения Win32_Process, потому что вы будете просто получать список запущенных в данный момент процессов. Вместо этого вы должны использовать "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);
}