如何区分具有相同名称的多个进程并杀死所有在 C# 中以我的 USERNAME 运行的进程?

Posted

技术标签:

【中文标题】如何区分具有相同名称的多个进程并杀死所有在 C# 中以我的 USERNAME 运行的进程?【英文标题】:How to differentiate multiple processes with the same name and to kill all those processes which are running with my USERNAME in C#? 【发布时间】: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 【参考方案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();

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

【讨论】:

以上是关于如何区分具有相同名称的多个进程并杀死所有在 C# 中以我的 USERNAME 运行的进程?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中,如何可靠地杀死进程树 [重复]

如何使用给定的部分名称杀死所有进程?

具有相同名称的多个进程

C#如何组合具有相同名称的名称值对列表中的值? [复制]

以编程方式从风暴螺栓中杀死拓扑时编译错误:对象和包具有相同的名称

如何反序列化具有相同名称但不同类型的 API 响应