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
。