Usuário com melhor resposta
Finalizar processo de usuário por código C#

Pergunta
-
Olá.
Preciso finalizar determinado processo de um usuário no momento em que meu programa é executado. Até aqui tudo bem, sei como fazer.
Meu problema é que esse programa é executado em uma maquina onde os usuários acessam por TS, ou seja, vão ser vários processos do meus programa só que para usuários diferentes.
Minha dúvida é, como finalizar apenas o processo de um usuário especificamente ?
Segue meu código atual:
private static void CloseProcess(string processo) { Process[] processes = Process.GetProcessesByName(processo); foreach (Process process in processes) { process.Kill(); } }
Grato.
Brian Souza - MCP Desenvolvedor C#.Net
Respostas
-
static void KillProcessByNameAndUserName(string processName, string userName) { var processes = from p in Process.GetProcessesByName(processName) where GetProcessOwner(p.Id) == userName select p; foreach(Process p in processes) p.Kill(); } static string GetProcessOwner(int processId) { string query = “Select * From Win32_Process Where ProcessID = “ + processId; ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); ManagementObjectCollection processList = searcher.Get(); foreach (ManagementObject obj in processList) { string[] argList = new string[] { string.Empty }; int returnVal = Convert.ToInt32(obj.InvokeMethod(“GetOwner”, argList)); if (returnVal == 0) return argList[0]; } return “NO OWNER”; }
Att,
Antero Marques
- Marcado como Resposta Brian Souza quinta-feira, 17 de março de 2016 16:11
Todas as Respostas
-
static void KillProcessByNameAndUserName(string processName, string userName) { var processes = from p in Process.GetProcessesByName(processName) where GetProcessOwner(p.Id) == userName select p; foreach(Process p in processes) p.Kill(); } static string GetProcessOwner(int processId) { string query = “Select * From Win32_Process Where ProcessID = “ + processId; ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); ManagementObjectCollection processList = searcher.Get(); foreach (ManagementObject obj in processList) { string[] argList = new string[] { string.Empty }; int returnVal = Convert.ToInt32(obj.InvokeMethod(“GetOwner”, argList)); if (returnVal == 0) return argList[0]; } return “NO OWNER”; }
Att,
Antero Marques
- Marcado como Resposta Brian Souza quinta-feira, 17 de março de 2016 16:11
-