[HELP] Utilisation de WMI en VB.Net ?? [Résolu]

Signaler
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
-
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
-
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

Messages postés
273
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
Ah oki dsl j'auré essayé ^^

bon courage
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
Bonjour,

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

Bonne Prog
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
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").

@+
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Pffff.... IE8 m'a fait n'importe quoi comme mise en page....
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
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
@+
Messages postés
273
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
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 ^^
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
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.)

@+
Messages postés
273
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
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é
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Oui, en local. Mais sur une machine distance ce n'est pas possible (quand tu fais .GetProcesses("REMOTE_MACHINE_NAME")).

@+
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
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
@+