找出谁在远程计算机上运行该进程

时间:2012-02-26 12:54:43

标签: vb.net process vb.net-2010

我正在尝试获取在远程计算机上运行的进程列表以及运行它们的用户名。到目前为止我已经:

Dim ps As System.Diagnostics.Process
For Each ps In System.Diagnostics.Process.GetProcesses("myserver")
    ListBox1.Items.Add(ps.ProcessName)
Next

1 个答案:

答案 0 :(得分:0)

How to get permissions for using System.Diagnostics.Process.GetProcess(string)? - 这可能是更好的方法。它是在C#中我可以翻译它,如果你想。

''' using System.Management;  
' don't forget! in VS you may have to add a new reference to this DLL
 Dim op As New ConnectionOptions()
 op.Username = "REMOTE_USER"
 op.Password = "REMOTE_PASSWORD"

Dim sc As New ManagementScope("\\REMOTE_COMPUTER_NAME\root\cimv2", op)

Dim query As New ObjectQuery("Select * from Win32_Process")

 Dim searcher As New ManagementObjectSearcher(sc, query)
 Dim result As ManagementObjectCollection = searcher.[Get]()

 For Each obj As ManagementObject In result
     If obj("Caption") IsNot Nothing Then
         Console.Write(obj("Caption").ToString() & vbTab)
     End If
     If obj("CommandLine") IsNot Nothing Then
         Console.WriteLine(obj("CommandLine").ToString())
         End If
Next



 Public Function GetProcessOwner(processId As Integer) As String
    Dim query As String = "Select * From Win32_Process Where ProcessID = " & processId
         Dim searcher As New ManagementObjectSearcher(query)
     Dim processList As ManagementObjectCollection = searcher.[Get]()

     For Each obj As ManagementObject In processList
         Dim argList As String() = New String() {String.Empty, String.Empty}
         Dim returnVal As Integer = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList))
         If returnVal = 0 Then
        ' return DOMAIN\user
             Return argList(1) & "\" & argList(0)
         End If
     Next

     Return "NO OWNER"
 End Function