[HELP] Utilisation de WMI en VB.Net ??

Résolu
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 - 25 mars 2009 à 13:06
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 - 25 mars 2009 à 17:56
Salut !

Je cherche à pouvoir récupérer la liste des modules d'un processus via WMI.

En VB6, on peut faire comme cela :

Set files = objHost.wmiConnexion.ReferencesTo(process.Path_.path, "CIM_ProcessExecutable")
For Each itemFile In files
Set aFile = objHost.wmiConnexion.Get(itemFile.Antecedent)
Next


En VB.Net c'est complètement différente, on utile l'espace de nom Management :

Dim colProcesses As Management.ManagementObjectSearcher
Dim colObserver As New Management.ManagementOperationObserver
Dim refProcess As Management.ManagementObject
Dim con As New ConnectionOptions
con.Username = Nothing
con.Password = Nothing
con.Impersonation = ImpersonationLevel.Impersonate
colProcesses = New Management.ManagementObjectSearcher("SELECT * FROM Win32_Process")
colProcesses.Scope = New Management.ManagementScope("\" & Server & "\root\cimv2", con)
For Each refProcess In colProcesses.Get
Console.WriteLine(refProcess.GetPropertyValue("Name"))
Dim colModule As ManagementObjectCollection = refProcess.GetRelationships("CIM_ProcessExecutable")
For Each refModule As ManagementObject In colModule
Dim oo As Object = refModule.GetPropertyValue("Antecedent")
Console.WriteLine(oo)
Next
Next


Le seul problème c'est que GetPropertyValue("Antecedent"), même si çà renvoie bien le module, renvoie une string alors que moi j'ai besoin d'un ManagementObject (classe CIM_ProcessExecutable).


Auriez vous une idée SVP ?

Merci
@+

10 réponses

Genildf Messages postés 270 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
25 mars 2009 à 15:56
Ah oki dsl j'auré essayé ^^

bon courage
3
lesdis Messages postés 403 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 7 août 2020
25 mars 2009 à 17:52
Bonjour,

Regarde du côté des classes WqlEventQuery et WqlObjectQuery.
Cela permet de faire des requêtes WMI au format WQL.

Bonne Prog
3
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
25 mars 2009 à 17:54
C'est pas grave :-) En plus je viens de trouver par hasard la solution ^^

Si quelqu'un en a besoin je la mets au cas où : il faut utiliser GetRelated("CIM_DataFile").

@+
3
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
25 mars 2009 à 13:10
Pffff.... IE8 m'a fait n'importe quoi comme mise en page....
0

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

Posez votre question
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
25 mars 2009 à 13:14
Salut !

Je cherche à pouvoir récupérer la liste des modules d'un processus via WMI.

En VB6, on peut faire comme cela :

Set files = objHost.wmiConnexion.ReferencesTo(process.Path_.path, "CIM_ProcessExecutable")
For Each itemFile In files
Set aFile = objHost.wmiConnexion.Get(itemFile.Antecedent)
Next


En VB.Net c'est complètement différente, on utile l'espace de nom Management :

Dim colProcesses As Management.ManagementObjectSearcher
Dim colObserver As New Management.ManagementOperationObserver
Dim refProcess As Management.ManagementObject
Dim con As New ConnectionOptions
con.Username = Nothing
con.Password = Nothing
con.Impersonation = ImpersonationLevel.Impersonate
colProcesses = New Management.ManagementObjectSearcher("SELECT * FROM Win32_Process")
colProcesses.Scope = New Management.ManagementScope("\" & Server & "\root\cimv2", con)
For Each refProcess In colProcesses.Get
Console.WriteLine(refProcess.GetPropertyValue("Name"))
Dim colModule As ManagementObjectCollection = refProcess.GetRelationships("CIM_ProcessExecutable")
For Each refModule As ManagementObject In colModule
Dim oo As Object = refModule.GetPropertyValue("Antecedent")
Console.WriteLine(oo)
Next
Next


Le seul problème c'est que GetPropertyValue("Antecedent"), même si çà renvoie bien le module, renvoie une string alors que moi j'ai besoin d'un ManagementObject (classe CIM_ProcessExecutable).


Auriez vous une idée SVP ?

Merci
@+
0
Genildf Messages postés 270 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
25 mars 2009 à 14:39
Tu est surement plus doué que moi en VB ( je pense)

Mais pourquoi tu utilise pas l'outil process dans VBNET?

For Each proc In Process.GetProcesses
            If proc.ProcessName = "ton process" Then
                Process1 = proc
            End If

Ou alors g rien compris ^^
0
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
25 mars 2009 à 15:18
Salut,

malheureusement, si la classe Process permet de lister les processus des postes distants, elle n'offre aucune action dessus (kill impossible, liste des modules impossible...etc.)

@+
0
Genildf Messages postés 270 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
25 mars 2009 à 15:29
Justement avec process1 (un objet que tu met dans ta boite a outils dans  les composants)

  For Each proc In Process.GetProcesses
            If proc.ProcessName = "ton process" Then
                Process1 = proc
              
            End If
        Next

Process1.Modules

J'arrive meme a killer avec

Process1.Modules te revoit les modules associé
0
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
25 mars 2009 à 15:44
Oui, en local. Mais sur une machine distance ce n'est pas possible (quand tu fais .GetProcesses("REMOTE_MACHINE_NAME")).

@+
0
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
25 mars 2009 à 17:56
Ah j'avais pas vu le message ;-)
Même si j'ai réussi sans Wql, je jetterai un coup d'oeil çà me servira peut être.

Merci
@+
0
Rejoignez-nous