HI ! I am developing one application in VC++6.0 using WMI, which displays all the products names which r installed on the remote machine. When I run this program it always displays the products which r installed on the local machine ! Please give the Solution for this problem!
Code:
IWbemLocator *pIWbemLocator = NULL;
IWbemServices *pWbemServices = NULL;
IEnumWbemClassObject *pEnumObject = NULL;
BSTR bstrNamespace = (L"\\\\remotemachinename\\root\\CIMV2");
HRESULT hRes = CoCreateInstance (
CLSID_WbemAdministrativeLocator,
NULL ,
CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER ,
IID_IUnknown ,
( void ** ) &pIWbemLocator);
BSTR bstrUser = (L"DOMAINNAME\\UserNameOnRemoteMachine");
BSTR bstrPWD = (L"password");
if (SUCCEEDED(hRes))
{
hRes = pIWbemLocator->ConnectServer(
bstrNamespace, // Namespace
bstrUser, // Userid
bstrPWD, // PW
L"MS_409", // Locale
0, // flags
NULL, // Authority
NULL, // Context
&pWbemServices);
}
else
{
AfxMessageBox("Unable to Connect!");
return;
}
BSTR strQuery = (L"Select * from Win32_Product");
BSTR strQL = (L"WQL");
hRes = pWbemServices->ExecQuery(strQL, strQuery, WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumObject);
ULONG uCount = 1, uReturned;
IWbemClassObject * pClassObject = NULL;
hRes = pEnumObject->Reset();
while ( 1 )
{
pClassObject = NULL;
hRes = pEnumObject->Next(WBEM_INFINITE,uCount, &pClassObject, &uReturned);
if( FAILED(hRes) || ( hRes == WBEM_S_FALSE ) )
break;
VARIANT v;
BSTR strClassProp = SysAllocString(L"Name");
hRes = pClassObject->Get(strClassProp, 0, &v, 0, 0);
SysFreeString(strClassProp);
_bstr_t bstrPath = &v;
char* strName = (char*)bstrPath;
if( SUCCEEDED(hRes) )
MessageBox(strName);
else
MessageBox("Error in getting object");
VariantClear( &v );
pClassObject->Release();
}
pIWbemLocator->Release();
pWbemServices->Release();
pEnumObject->Release();