Meilleur auteur de réponses
Utilisation de IWbemServices::ExecMethod

Question
-
Bonjour,
J'essai d'utiliser la méthode "IWbemServices::ExecMethod" avec
BSTR MethodName = SysAllocString(L"GetBinaryValue");
BSTR ClassName = SysAllocString(L"StdRegProv");
mais j'ai problème pour remonter le résultat. Mon code est le suivant:
...
//Connection OK
BSTR MethodName = SysAllocString(L"GetBinaryValue");
BSTR ClassName = SysAllocString(L"StdRegProv");
hres = S_OK;
IWbemLocator *ppiWmiLoc = NULL;
IWbemClassObject* pClass = NULL;
hres = pSvc->GetObject(ClassName, 0, NULL, &pClass, NULL);
IWbemClassObject* pInParamsDefinition = NULL;
IWbemClassObject* pOutParamsDefinition = NULL;
hres = pClass->GetMethod(MethodName, 0,&pInParamsDefinition, &pOutParamsDefinition);
IWbemClassObject* pInClassInstance = NULL;
hres = pInParamsDefinition->SpawnInstance(0, &pInClassInstance);
IWbemClassObject* pOutClassInstance = NULL;
hres = pInParamsDefinition->SpawnInstance(0, &pOutClassInstance);
IWbemCallResult* ppCallResult = NULL;
//////////////////////////////////////////
VARIANT varCommand;
varCommand.vt = VT_I4;
varCommand.lVal = (LONG)HKEY_LOCAL_MACHINE;
hres = pInClassInstance->Put(L"hDefKey", 0, &varCommand, 0);
//////////////////////////////////////////
//////////////////////////////////////////
varCommand.vt = VT_BSTR;
varCommand.bstrVal = L"SOFTWARE\\Essai";
hres = pInClassInstance->Put(L"sSubKeyName", 0, &varCommand, 0);
//////////////////////////////////////////
//////////////////////////////////////////
varCommand.vt = VT_BSTR;
varCommand.bstrVal = L"";
hres = pInClassInstance->Put(L"sValueName", 0, &varCommand, 0);
//////////////////////////////////////////
// Execute Method
hres = pSvc->ExecMethod(ClassName, MethodName, 0, NULL, pInClassInstance, &pOutClassInstance, &ppCallResult);
BSTR ret;
hres = pOutClassInstance->GetObjectText(0, &ret);
// Vérification des paramètres passés
VARIANT varInValue;
VariantClear(&varInValue);
hres = pInClassInstance->Get(_bstr_t(L"hDefKey"), 0, &varInValue, NULL, 0);
VariantClear(&varInValue);
hres = pInClassInstance->Get(_bstr_t(L"sSubKeyName"), 0, &varInValue, NULL, 0);
// traitement du résultat
VARIANT varResultValue;
IWbemClassObject* ppResultObject;
hres = ppCallResult->GetResultObject(WBEM_INFINITE, &ppResultObject);
// Ne retourne jamais rien : attendu valeur de la clef
// WBEM_E_NOT_FOUND 2147749890 (0x80041002) ----> Object cannot be found.
hres = ppResultObject->GetObjectText(0, &ret);
...
//Deconnection
Est ce que quelqu'un pourrait m'aider ?
Merci
Réponses
-
Bonjour,
Pour se connecter au registre d’une machine distante, on peut utiliser aussi la fonction RegConnectRegistry
Cordialement,
Alex
________________
Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007
Astuces pour Visual Studio 2010
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
- Marqué comme réponse Alex Petrescu lundi 26 juillet 2010 07:07
Toutes les réponses
-
Bonjour,
La documentation MSDN spécifie que si la valeur WBEM_INFINITE est utilisée, l’appel est bloqué jusqu’au moment où l’objet est disponible. Le problème doit être avec votre objet. Consultez la documentation MSDN pour plusieurs informations sur cette méthode. Surtout soyez attentif à la description de la méthode et au fait qu’elle récupère un objet issu d’un appel antérieur semi-synchrone au IWbemService ::GetObject ou IWbemServices ::ExecMethod.
Cordialement,
Alex
________________
Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007
Astuces pour Visual Studio 2010
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
-
J'ai essayé
WBEM_NO_WAIT
Mais cela fait la même chose. Je commence a me demander si c'est la bonne facon de faire ???
En fait mon but est de recuperer la valeur d'une clef de registre par WMI(Sur un PC distant). Tout le reste fonctionne super bien sauf ca!
Est ce la bonne methode
-
Bonjour,
Pour se connecter au registre d’une machine distante, on peut utiliser aussi la fonction RegConnectRegistry
Cordialement,
Alex
________________
Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007
Astuces pour Visual Studio 2010
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
- Marqué comme réponse Alex Petrescu lundi 26 juillet 2010 07:07
-
Bonjour,
Est-ce que cette fonction répond a vos besoins ?
Cordialement,
Alex
________________
Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007
Astuces pour Visual Studio 2010
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.