J'essaie d'utiliser le code suivant pour écrire tous les processus démarrés sur un ordinateur. Mon problème est que la méthode EventArrived est passée à un EventArrivedEventArgs qui a une propriété NewEvent de type ManagementBaseObject. Cela n'a pas une méthode InvokeMethod. Puis-je convertir la propriété NewEvent en ManagementObject d'une certaine manière, ou dois-je requery et créer un ManagementObject? Le code ci-dessous fonctionne très bien, mais ne voudrait pas actualiser.Convertir .Net ManagementBaseObject en ManagementObject
Imports System.Management
Public NotInheritable Class EntryPoint
Public Shared Sub Main(ByVal args() As String)
Dim scope As New ManagementScope("\\.\root\cimV2")
Dim query As New WqlEventQuery("__InstanceCreationEvent", TimeSpan.FromSeconds(1), "TargetInstance isa ""Win32_Process""")
Using watcher As New ManagementEventWatcher(scope, query)
AddHandler watcher.EventArrived, AddressOf EventArrived
watcher.Start()
Console.WriteLine("Waiting for processes to start...")
Console.ReadLine()
watcher.Stop()
End Using
End Sub
Private Shared Sub EventArrived(ByVal sender As Object, ByVal e As EventArrivedEventArgs)
Dim targetInstance As ManagementBaseObject = e.NewEvent("TargetInstance")
Dim process As New ManagementObject("win32_process.handle=" + targetInstance("ProcessId").ToString())
Dim output(1) As String
process.InvokeMethod("GetOwner", output)
Console.WriteLine("Process {0} started by {2}\{1}", targetInstance("Name"), output(0), output(1))
End Sub
End Class
Non aller ... targetInstance n'est pas une instance ManagementObject. –
Dans ce cas, non, il n'est pas possible de faire sans exécuter une autre requête. –