如何区分具有相同名称的多个进程并杀死所有在 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 运行的进程?的主要内容,如果未能解决你的问题,请参考以下文章