Connection wmi

Signaler
Messages postés
341
Date d'inscription
mercredi 8 juin 2005
Statut
Membre
Dernière intervention
10 février 2009
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Salut,
j'ai un pb avec ma connection wmi, quand j'execute ma fonction une exception non gérée 'invalid cast exception' est lancée. Le hic c'est que ça marche su plusieurs machines qui ont la même config que celle où ça plante.
Si quelqu'un peut m'aider ce serait cool.


Voici la fct :


//Aquisition de tous les OS présents sur la machine

ManagementPath WMIQuery = new ManagementPath("Win32_OperatingSystem");

ManagementObjectCollection Systems = new ManagementClass(this.MachineScope, WMIQuery, null).GetInstances();

//Remplissage de la variable retournée

foreach (ManagementObject System in Systems)

{

//Obtention des infos sur l'OS

Result.OperatingSystem.Name = System["Caption"].ToString();

Result.OperatingSystem.Type = Enum.GetName(typeof(PlatFormTypes_Large), System["OSType"]);

Result.OperatingSystem.Version = System["Version"].ToString();

//Obtention des infos sur le service pack

Result.ServicePack.Name = System["CSDVersion"].ToString();

Result.ServicePack.Version = System["ServicePackMajorVersion"].ToString();

Result.ServicePack.Version += "." + System["ServicePackMinorVersion"].ToString();

}

7 réponses

Messages postés
341
Date d'inscription
mercredi 8 juin 2005
Statut
Membre
Dernière intervention
10 février 2009
2
Auto-réponse :
En fait le pb ne semble pas venir de la fonction, car même avec wbemtest ça ne marche pas : erreur 0x8004002. Je suis perplexe si quelqu'un peut maider.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Tu veux dire 0x80004002, si on interprete se code comme un HRESULT ca donne E_NOINTERFACE No such interface supported, je ne sais pas si c'est plus significatif que l'exception InvalidCastException. :(
Messages postés
341
Date d'inscription
mercredi 8 juin 2005
Statut
Membre
Dernière intervention
10 février 2009
2
Merci Lutinore, pour plus avoir plus d'info j'ai exécuté mon vode sous forme d'un script vb et là je me retrouve avec un message du style 'cette classe ne gère pas l'automation'.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Je ne suis pas du tout mais alors pas du tout un spécialiste de WMI, mais il y'a 3 API WMI

.NET ( System.Management )
COM ( IWbem )
Automation ( SWbemScripting )
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Tu l'as déclare comment ta variable this.MachineScope ?
Messages postés
341
Date d'inscription
mercredi 8 juin 2005
Statut
Membre
Dernière intervention
10 février 2009
2
Ben comme ça :
private ManagementScope MachineScope;
et je l'initialise comme ça :

private ManagementScope connectScope(string ComputerName, string Log, string Pwd)
{

//Configuration des options
ConnectionOptions Options = new ConnectionOptions();
Options.Username = Log;
Options.Password = Pwd;

//Configurartion du chemin d'accès au cimv2
ManagementPath Path = null;
if (ComputerName == null)
{
Path = new ManagementPath("\\root\\cimv2");
}
else
{
Path = new ManagementPath("\\\" + ComputerName + "\\root\\cimv2");
}

//Construction du Scope de la machine
ManagementScope Scope = new ManagementScope(Path, Options);

//Connection à la machine
try
{
Scope.Connect();
}
catch (ManagementException ex)//Erreur d'autentification
{
ConnexionException = "Unable to connect directly to server : ";
ConnexionException += "cannot authenticate current user." ;
ConnexionException += "\r\n(" + ex.Message + ")";
return null;
}
catch (System.Runtime.InteropServices.COMException ex)//Erreur sur le RPC distant
{
ConnexionException = "Unable to connect directly to server : ";
ConnexionException += "cannot connect to RPC service.";
ConnexionException += "\r\n(" + ex.Message + ")";
return null;
}
catch (System.UnauthorizedAccessException ex)//Erreur d'autorisations
{
ConnexionException = "Unable to connect directly to server : ";
ConnexionException += "unauthorized access.";
ConnexionException += "\r\n(" + ex.Message + ")";
return null;
}
ConnexionException = null;
return Scope;
}
Dans le cas du plantage je suis loggé sur la machine local en tant qu'admin donc j'ecris connectScope(null, null, null)
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
C'est cette fonction qui plante, non ? tu ne dis pas ou a lieu ton exception, je pense que tu as une COMException ( erreur sur le RPC distant ) mais que tu ne peux pas l'intercepter dans ton catch vu que le framework mappe E_NOINTERFACE en InvalidCastException, et donc l'exception remonte plus haut. Même si c'est ca, ca ne va pas résoudre le problème, désolé je ne m'y connais pas assez en WMI pour comprendre d'où vient le problème.