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

violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 25 mars 2009 à 13:06 - Dernière réponse : violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention
- 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
@+
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Genildf 273 Messages postés lundi 12 janvier 2009Date d'inscription 30 décembre 2015 Dernière intervention - 25 mars 2009 à 15:56
3
Merci
Ah oki dsl j'auré essayé ^^

bon courage

Merci Genildf 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Genildf
Meilleure réponse
lesdis 401 Messages postés mercredi 19 avril 2006Date d'inscription 6 juin 2011 Dernière intervention - 25 mars 2009 à 17:52
3
Merci
Bonjour,

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

Bonne Prog

Merci lesdis 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de lesdis
Meilleure réponse
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 25 mars 2009 à 17:54
3
Merci
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").

@+

Merci violent_ken 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de violent_ken
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 25 mars 2009 à 13:10
0
Merci
Pffff.... IE8 m'a fait n'importe quoi comme mise en page....
Commenter la réponse de violent_ken
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 25 mars 2009 à 13:14
0
Merci
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
@+
Commenter la réponse de violent_ken
Genildf 273 Messages postés lundi 12 janvier 2009Date d'inscription 30 décembre 2015 Dernière intervention - 25 mars 2009 à 14:39
0
Merci
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 ^^
Commenter la réponse de Genildf
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 25 mars 2009 à 15:18
0
Merci
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.)

@+
Commenter la réponse de violent_ken
Genildf 273 Messages postés lundi 12 janvier 2009Date d'inscription 30 décembre 2015 Dernière intervention - 25 mars 2009 à 15:29
0
Merci
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é
Commenter la réponse de Genildf
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 25 mars 2009 à 15:44
0
Merci
Oui, en local. Mais sur une machine distance ce n'est pas possible (quand tu fais .GetProcesses("REMOTE_MACHINE_NAME")).

@+
Commenter la réponse de violent_ken
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 25 mars 2009 à 17:56
0
Merci
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
@+
Commenter la réponse de violent_ken

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.