Connection wmi

t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 - 25 juil. 2005 à 15:51
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 27 juil. 2005 à 15:44
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

t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 2
26 juil. 2005 à 15:53
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.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 juil. 2005 à 18:52
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. :(
0
t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 2
27 juil. 2005 à 09:05
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'.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
27 juil. 2005 à 09:36
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 )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
27 juil. 2005 à 11:43
Tu l'as déclare comment ta variable this.MachineScope ?
0
t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 2
27 juil. 2005 à 13:41
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)
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
27 juil. 2005 à 15:44
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.
0
Rejoignez-nous