Vb.net 如何按用户终止进程?

Vb.net 如何按用户终止进程?,vb.net,process,kill,Vb.net,Process,Kill,我使用的应用程序会终止终端服务器上的进程iexplore(Internet Explorer)。我遇到的问题是,我杀死了终端服务器上Internet Explorer的所有进程,而不仅仅是当前用户的进程 因此,如果我以User1的身份登录并杀死IE,它将被User2、User3等杀死。。。我只想杀死User1的Internet Explorer。我使用以下代码终止进程: Private Sub ClearProcesses(ByVal ProcessName As String) Dim

我使用的应用程序会终止终端服务器上的进程
iexplore
(Internet Explorer)。我遇到的问题是,我杀死了终端服务器上Internet Explorer的所有进程,而不仅仅是当前用户的进程

因此,如果我以
User1
的身份登录并杀死IE,它将被
User2
User3
等杀死。。。我只想杀死
User1
的Internet Explorer。我使用以下代码终止进程:

Private Sub ClearProcesses(ByVal ProcessName As String)
    Dim myProcesses = Process.GetProcessesByName(ProcessName)
    For Each Proc As Process In myProcesses
        Try
            Proc.Kill()
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "ClearProcess")
        End Try
    Next
End Sub

是否有一种方法仅终止
User1
的进程?

您可以使用WMI获取进程的所有者,并验证该进程是否由当前用户拥有

使用这样的函数:

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
            ' argList(0) == User
            ' argList(1) == DOMAIN
            Return argList(0)
        End If
    Next

    Return "NO OWNER"
End Function
您应该能够执行以下操作:

Private Sub ClearProcesses(ByVal ProcessName As String)
    Dim myProcesses = Process.GetProcessesByName(ProcessName).Where(Function(p) GetProcessOwner(p.Id) = currentUser)

    ' Your current code...

谢谢你的回复。ManagementObject是.NET还是COM引用?我在找你it@Alex.NET-System.Management.dll:谢谢,我现在引用了它。但我收到一个错误:
重载解析失败,因为无法使用这些参数调用可访问的“Where”
。我使用了以下代码行:
Dim myprocesss=Process.GetProcessesByName(ProcessName).Where(Sub(p)GetProcessOwner(p.Id)=System.Environment.UserName)
。很有效,谢谢!
GetProcessOwner
函数中还有另一个输入错误。声明查询时,我的程序崩溃,因为我必须添加
…Where ProcessID=“+ProcessID.ToString