Hi, Sunit here i am working on WMI technology....
Actually i am trying to start/stop services through WMI in C but it's not happening...
Actually i am able to catch all the processes in the local as well as remote system... That is connection and query are succesfull. But i am unable to execute the method...
Here is the piece of code i am writing to start/stop a service...
if(temp.CompareNoCase("Alerter") == 0) // this is how i am catching the service to stop/start after querying
{
printf("\nAlerter Killed\n");
BSTR MethodName = SysAllocString(L"StartService"); //method name
BSTR ClassName = SysAllocString(L"Win32_Service");//class name
char name[50] = "";
sprintf(name,"Win32_Service.DisplayName=\"%s\"",temp);
AfxMessageBox(name);
CString ClassPath = name;
IWbemClassObject* pClass = NULL;
hres = pSvc->GetObject(ClassName, 0, NULL, &pClass, NULL);
// Execute Method
IWbemClassObject* pOutParams = NULL;
hres = pSvc->ExecMethod(_bstr_t(ClassPath), MethodName, 0,
NULL, NULL, &pOutParams, NULL);
// if you want to see what the method returned,
// use the following code. The return value will
// be in &varReturnValue
// Inspect out-parameters for return value
CComVariant varReturnValue;
hres = pOutParams->Get(L"ReturnValue", 0, &varReturnValue, 0, 0);
_tprintf(_T("\n %ls::%ls returned %ls\n"), ClassName, MethodName,
V_BSTR(&varReturnValue));
if (FAILED(hres))
{
cout << "Could not execute method. Error code = 0x"
<< hex << hres << endl;
SysFreeString(ClassName);
SysFreeString(MethodName);
pClass->Release();
pOutParams->Release();
pSvc->Release();
CoUninitialize();
return 1; // Program has failed.
}
// Clean up
//--------------------------
VariantClear(&varReturnValue);
SysFreeString(ClassName);
SysFreeString(MethodName);
pClass->Release();
pOutParams->Release();
}
but here in this piece of the ExecMethod( ) function always fails... Could you tell me how to solve this problem in C....that is i need to start and stop services as per the user... Apart from this is there any other way to start/stop a service using WMI,C/C++.. Need Help
Thanks in advance..
Regards,
Sunit Nair
Actually i am trying to start/stop services through WMI in C but it's not happening...
Actually i am able to catch all the processes in the local as well as remote system... That is connection and query are succesfull. But i am unable to execute the method...
Here is the piece of code i am writing to start/stop a service...
if(temp.CompareNoCase("Alerter") == 0) // this is how i am catching the service to stop/start after querying
{
printf("\nAlerter Killed\n");
BSTR MethodName = SysAllocString(L"StartService"); //method name
BSTR ClassName = SysAllocString(L"Win32_Service");//class name
char name[50] = "";
sprintf(name,"Win32_Service.DisplayName=\"%s\"",temp);
AfxMessageBox(name);
CString ClassPath = name;
IWbemClassObject* pClass = NULL;
hres = pSvc->GetObject(ClassName, 0, NULL, &pClass, NULL);
// Execute Method
IWbemClassObject* pOutParams = NULL;
hres = pSvc->ExecMethod(_bstr_t(ClassPath), MethodName, 0,
NULL, NULL, &pOutParams, NULL);
// if you want to see what the method returned,
// use the following code. The return value will
// be in &varReturnValue
// Inspect out-parameters for return value
CComVariant varReturnValue;
hres = pOutParams->Get(L"ReturnValue", 0, &varReturnValue, 0, 0);
_tprintf(_T("\n %ls::%ls returned %ls\n"), ClassName, MethodName,
V_BSTR(&varReturnValue));
if (FAILED(hres))
{
cout << "Could not execute method. Error code = 0x"
<< hex << hres << endl;
SysFreeString(ClassName);
SysFreeString(MethodName);
pClass->Release();
pOutParams->Release();
pSvc->Release();
CoUninitialize();
return 1; // Program has failed.
}
// Clean up
//--------------------------
VariantClear(&varReturnValue);
SysFreeString(ClassName);
SysFreeString(MethodName);
pClass->Release();
pOutParams->Release();
}
but here in this piece of the ExecMethod( ) function always fails... Could you tell me how to solve this problem in C....that is i need to start and stop services as per the user... Apart from this is there any other way to start/stop a service using WMI,C/C++.. Need Help
Thanks in advance..
Regards,
Sunit Nair
Last edited: