Find my own process ID in VBScript

后端 未结 10 1029
小蘑菇
小蘑菇 2020-11-28 14:49

I\'m using the following code snippet to determine what process ID my vbscript is running as:

On Error Resume Next
Dim iMyPID : iMyPID = GetObject(\"winmgmts         


        
10条回答
  •  孤城傲影
    2020-11-28 15:03

    mshta terminates itself immediately. Maybe it's too late to achieve parent process id by using WMI service.
    So, I'd use something like this to eliminate concurrent script processes.

    1. Generate random things.
    2. Determine an application which could be installed on each system, never terminates by itself (e.g. command prompt with /k parameter).
    3. Start the application in hidden mode with generated random argument (WshShell.Run).
    4. Wait a few milliseconds
    5. Query the running processes by using command line argument value.
    6. Get the ParentProcessId property.
    Function CurrProcessId
        Dim oShell, sCmd, oWMI, oChldPrcs, oCols, lOut
        lOut = 0
        Set oShell  = CreateObject("WScript.Shell")
        Set oWMI    = GetObject(_
            "winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
        sCmd = "/K " & Left(CreateObject("Scriptlet.TypeLib").Guid, 38)
        oShell.Run "%comspec% " & sCmd, 0
        WScript.Sleep 100 'For healthier skin, get some sleep
        Set oChldPrcs = oWMI.ExecQuery(_
            "Select * From Win32_Process Where CommandLine Like '%" & sCmd & "'",,32)
        For Each oCols In oChldPrcs
            lOut = oCols.ParentProcessId 'get parent
            oCols.Terminate 'process terminated
            Exit For
        Next
        CurrProcessId = lOut
    End Function
    
    Dim ProcessId
    ProcessId = CurrProcessId 'will remain valid indefinitely
    
    WScript.Echo ProcessId
    

提交回复
热议问题