none
Finalizar processo de usuário por código C# RRS feed

  • 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

    quinta-feira, 17 de março de 2016 13:18

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
    quinta-feira, 17 de março de 2016 13:29

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
    quinta-feira, 17 de março de 2016 13:29
  • Obrigado Antero.

    Funcionou.


    Brian Souza - MCP Desenvolvedor C#.Net

    quinta-feira, 17 de março de 2016 16:12