Jump to content

WMI ExitCode Win32_ProcessStopTrace (even when missed)


Recommended Posts

Hi,

I'm currently struggling with a piece of code.

Func _WMI_Win32_Process($sWorkingDirectory = Null)

    Global $sApplication, $intProcessID

    Local $i = 0
    Local $aErr[1][2] = [[0, 0]]

    If $sComputer & $sUser & $sPassword = "." Then  ; Localhost
        ToolTip("...ObjGet", @DesktopWidth - 30,@DesktopHeight - 130, "Win32_Process",1,4)
        Global $oWMIService = ObjGet("winmgmts:\\" & $sComputer & "\root\CIMV2")
        If Not IsObj($oWMIService) Then Return SetError(2, 99, $aErr)
    Else
        ToolTip("...ObjCreate", @DesktopWidth - 30,@DesktopHeight - 130, "Win32_Process",1,4)
        Local $wmiLocator = ObjCreate("WbemScripting.SWbemLocator")

        If Not IsObj($wmiLocator) Then Return SetError(3, 99, $aErr)
        ToolTip("...ConnectServer", @DesktopWidth - 30,@DesktopHeight - 130, "Win32_Process",1,4)
        Global $oWMIService = $wmiLocator.ConnectServer($sComputer, "\root\CIMV2", $sUser, $sPassword)
        If Not IsObj($oWMIService) Then Return SetError(4, 99, $aErr)

    EndIf

    ToolTip("...ExecQuery", @DesktopWidth - 30,@DesktopHeight - 130, "Win32_Process",1,4)

    Local $objStartup = $oWMIService.Get("Win32_ProcessStartup")
    Local $objConfig = $objStartup.SpawnInstance_
    Local $Security = $oWMIService.Security_
    $Security.ImpersonationLevel = 3

    Local $oWMIClass = $oWMIService.Get("Win32_Process")
    Local $sReturn = $oWMIClass.Create($sApplication, NULL, $objConfig, $intProcessID) ;no working directory specified

Return($intProcessID)

EndFunc ;==>_WMI_Win32_Process

Func _WMI_CheckExitCode()

    Global $oWMIService, $intProcessID
    Local $i = 0

    ToolTip("...Process is Running" & @CRLF & "   PID: " & $intProcessID, @DesktopWidth - 30,@DesktopHeight - 130, "Win32_Process",1,4)

    Local $colProcessStopTrace = $oWMIService.ExecNotificationQuery("SELECT * FROM Win32_ProcessStopTrace")

    Do
        Local $objLatestEvent = $colProcessStopTrace.NextEvent(1)
        If $objLatestEvent.ProcessId = $intProcessID Then $i = 1
    Until $i = 1

    SetError($objLatestEvent.ExitStatus)

EndFunc ;==>_WMI_CheckExitCode

What i want is get the ExitCode of the ended proces, but i get not always the ExitCode if the process has ended (For example: Two processes end at the same time).
Is it possible to Query the ExitCode in another way than use the Win32_ProcessStopTrace and the $colProcessStopTrace.NextEvent?

The WMI Command is running on a remote machine.

Is there a way to request the ExitCodes from a process that had running in the past using the PID on a remote machine?

Thanks in advance.

Edited by Rijswijker
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...