.NET ManagementBaseObject를 ManagementObject로 변환합니다
문제
컴퓨터에서 시작된 모든 프로세스를 작성하기 위해 다음 코드를 사용하려고합니다. 내 문제는 Eventarived 메소드가 유형 ManagementBaseObject의 NewEvent 속성을 갖는 EventArivedEventArgs가 전달된다는 것입니다. 이것은 invokemethod 메소드가 없습니다. NewEvent 속성을 관리 관으로 변환 할 수 있습니까? 아래 코드는 훌륭하게 작동하지만 레시에도 원하지 않습니다.
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
해결책
이다 대상 a ManagementObject
사례? 인덱서는 리턴 값을 a로 전달할 수 있습니다 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