【发布时间】:2009-06-22 18:25:04
【问题描述】:
我正在尝试使用以下代码写出在计算机上启动的所有进程。我的问题是 EventArrived 方法传递了一个 EventArrivedEventArgs,它具有类型 ManagementBaseObject 的 NewEvent 属性。这没有 InvokeMethod 方法。我可以通过某种方式将 NewEvent 属性转换为 ManagementObject,还是需要重新查询并创建 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
【问题讨论】: