如何从 WMI 旋转远程进程获取退出代码

coe*_*rgo 5 c# wmi

我正在通过 WMI (Win32_Process Create) 远程执行进程,但无法确定如何确定进程何时完成执行。当我第一次发出命令时,有一个退出代码(0 表示成功),但这只是告诉我进程已成功生成。

有没有办法知道进程何时结束?谢谢!

JPB*_*anc 0

这是一个在 .NET 对象之上创建的示例,但使用 Powershell 编写,很容易将其转换为 C#

Clear-Host

# Authentication object
$ConOptions = New-Object System.Management.ConnectionOptions
$ConOptions.Username = "socite\administrateur"
$ConOptions.Password = "adm"
$ConOptions.EnablePrivileges = $true
$ConOptions.Impersonation = "Impersonate"
$ConOptions.Authentication = "Default"

$scope = New-Object System.Management.ManagementScope("\\192.168.183.220\root\cimV2", $ConOptions)

$ObjectGetOptions = New-Object System.Management.ObjectGetOptions($null, [System.TimeSpan]::MaxValue, $true)

# Equivalent to local :
# $proc = [wmiclass]"\\.\ROOT\CIMV2:Win32_Process"
$proc = New-Object System.Management.ManagementClass($scope, "\\192.168.183.220\ROOT\CIMV2:Win32_Process", $ObjectGetOptions)

# Now create the process remotly
$res = $proc.Create("cmd.exe")

# Now create an event to detect remote death
$timespan = New-Object System.TimeSpan(0, 0, 1)
$querryString = "SELECT * From WIN32_ProcessStopTrace WHERE ProcessID=$($res.ProcessID)"
$query = New-Object System.Management.WQLEventQuery ($querryString)

$watcher = New-Object System.Management.ManagementEventWatcher($scope, $query)

$b = $watcher.WaitForNextEvent()
$b
Run Code Online (Sandbox Code Playgroud)