Преобразование .Net ManagementBaseObject в ManagementObject
Вопрос
Я пытаюсь использовать следующий код для записи всех процессов, запущенных на компьютере. Моя проблема заключается в том, что метод EventArrived передается EventArrivedEventArgs, который имеет свойство NewEvent типа ManagementBaseObject. У этого нет метода 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
Решение
ЕСТЬ объект является экземпляром ManagementObject
? Индексатор может передать возвращаемое значение как Base
, потому что это свойство общего назначения. Попробуйте это:
Private Shared Sub EventArrived(ByVal sender As Object, ByVal e As EventArrivedEventArgs)
Dim targetInstance As ManagementBaseObject = e.NewEvent("TargetInstance")
If TypeOf targetInstance Is ManagementObject Then
Dim mo as ManagementObject = DirectCast(targetInstance, ManagementObject)
Dim output(1) as String
mo.InvokeMethod("GetOwner", output)
Console.WriteLine("Process {0} started by {2}\{1}", targetInstance("Name"), output(0), output(1))
End If
End Sub
Не связан с StackOverflow