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();


Reply With Quote
Bookmarks