【问题标题】:How to differentiate multiple processes with the same name and to kill all those processes which are running with my USERNAME in C#?如何区分具有相同名称的多个进程并杀死所有在 C# 中以我的 USERNAME 运行的进程?
【发布时间】:2020-10-05 13:38:41
【问题描述】:

我有多个名为 COM SURROGATE (dllhost.exe) 的进程正在我系统的任务管理器中运行。在其中我需要杀死所有使用我的 USERNAME 运行的进程(一个使用 SYSTEM/"" 运行,所以不需要杀死它)。

我需要执行以下操作,但仅限于使用 myusername 运行的 dllhost 进程:

Process[] runningProcess = Process.GetProcessesByName("dllhost");
                if(runningProcess.Length > 0 )
                {
                    foreach (var surrogateProcess in runningProcess)
                    {
                        surrogateProcess.Kill();
                    }
                }
  

【问题讨论】:

  • 这能回答你的问题吗? How do I determine the owner of a process in C#?
  • @JonasH :谢谢,明天早上我会应用它并确认它是否有效..同时让我们看看是否有人以其他方式提供帮助。
  • @JonasH :这行不通。已经有我的 id 正在运行的进程,但搜索者没有找到该进程,并且所有者为此返回“NO OWNER”。我的进程是:C:\Windows\SysWOW64\dllhost.exe

标签: c# process kill-process taskmanager


【解决方案1】:

我找到了解决方案。以下是要点: 我们无法在没有管理员权限的情况下关闭由 SYSTEM/""/otheruser 等运行的进程,因此 process.kill() 用于抛出 Access Denied 错误。

通过使用下面的方法,我们试图终止所有名为 dllhost.exe 的进程(我们可以写任何进程名称)并使用 Style.Hidden,这样用户就不会看到 cmd 提示,甚至看不到消息。 消息可能是: 错误:无法终止 PID 为 6332 的进程“dllhost.exe”。 原因:访问被拒绝。 [这与系统或其他用户一起运行] 成功:PID 为 15320 的进程“dllhost.exe”已终止。 [这是使用我的用户名运行的,可以毫无问题地关闭]

System.Diagnostics.Process process = new System.Diagnostics.Process();
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                startInfo.FileName = "cmd.exe";
                startInfo.Arguments = "/C taskkill /IM dllhost.exe /F";
                process.StartInfo = startInfo;
                process.Start();

代码将关闭所有使用我的用户名运行的进程。干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    相关资源
    最近更新 更多