如何使用应用程序名称而不是进程名称杀死应用程序

Posted

技术标签:

【中文标题】如何使用应用程序名称而不是进程名称杀死应用程序【英文标题】:How to kill an application with a application NAME not process name 【发布时间】:2021-09-21 02:23:18 【问题描述】:

我有一个程序可以像这样检索应用程序列表

string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";

            int id = -1;

            using (RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
            
                foreach (string subkey_name in key.GetSubKeyNames())
                
                    using (RegistryKey subkey = key.OpenSubKey(subkey_name))
                    
                        subkey.GetValue("DisplayName"))

上面的代码将返回应用程序的名称,例如 Google 会给我一个“Google Chrome”而不是“chrome.exe”的输出启动。我无法找到一种方法来杀死具有输出“Google Chrome”的应用程序,或者找到一种方法来从 PC 获取所有应用程序进程,而无需运行每个程序来获取它们。

【问题讨论】:

【参考方案1】:

上面的代码将为您提供应用程序的名称,因为它们显示在控制面板的“程序和功能”列表中。如果您查询同一键的UninstallString 值,您将获得卸载该应用程序的命令。但是从这些名称到构成给定应用程序的可执行文件之间没有链接(这也可以是多个)。

注册表中的此列表不适合您的目的。您可以改为检查正在运行的进程,或列出开始菜单的条目,或改为检查自动启动条目 - 仅举几个更好的选项。

【讨论】:

【参考方案2】:

如果您的任务是终止或退出具有特定名称的所有正在运行的进程,您可以调用GetProcessByName(string processName) 来获取与该名称匹配的所有进程实例。如果您返回一个非空的实例数组,请在每个实例上调用 Close() 或 Kill()。

【讨论】:

以上是关于如何使用应用程序名称而不是进程名称杀死应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中杀死名称服务器进程

如何按名称关闭窗口?

杀进程的三种方式

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

Linux命令应用大词典-第23章 进程和服务管理

如何杀死所有匹配名称的进程?