Процесс убийства пользователем
Я использую приложение, которое убивает процесс iexplore
(Internet Explorer) на сервере терминалов. Проблема, с которой я сталкиваюсь, заключается в том, что я убиваю все процессы Internet Explorer на сервере терминалов, а не только одного текущего пользователя.
Поэтому, если я войду в систему как пользователь 1 и убью IE, он будет убит для пользователя 2, пользователя 3 и так далее ... Я только хочу, чтобы Internet Explorer User1 был убит. Я использую следующий код, чтобы убить мой процесс:
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
Есть ли способ только убить процесс для пользователя 1?
1 ответ:
С помощью 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...