在C#中杀死我的程序以外的所有进程

时间:2014-08-01 18:49:54

标签: c# process

不,这不是恶意软件。我正在尝试制作一个PC助手工具来杀死所有非Windows进程的任务,但在此过程中,它会自行杀死。

这是一个控制台应用程序,所以我试着解除cmd.exe杀死,但它仍然会杀死我的程序。

有这样的方式吗?

if (process.ToString == this.ExecutableName)

4 个答案:

答案 0 :(得分:2)

它比

更容易
Process self = Process.GetCurrentProcess() ;
foreach( Process p in Process.GetProcesses().Where( p => p.Id != self.Id ) )
{
  p.Kill() ;
}

如果你需要担心你的父进程(所以你不要杀死启动你的进程的命令shell,问题How can I get the PID of the parent process of my application的答案应该引导你。

答案 1 :(得分:0)

如果从解决方案文件夹运行应用程序,您的进程将在任务管理器中轻松识别,例如:consoleApplication1.exe

您可以通过以下方式获取流程名称:

var cb = Assembly.GetExecutingAssembly().CodeBase;
var processName = Path.GetFileName(cb);

您将在任务管理器的进程列表中看到,如果您正在调试并且您已经启用了Visual Studio托管过程,那么该过程的名称会有所不同。检查。在这个例子中,进程名称是

consoleApplication1.vshost.exe

您可以通过右键单击项目并单击"属性"取消选中此选项。然后选择" Debug"。你应该看到一个复选框说"启用visual studio hosting process"。取消选中该复选框。

您的流程名称将是

  

ConsoleApplication1.exe中

答案 2 :(得分:0)

List<string> safeProcs = new List<string>() { "App1", "App2", "App3" };

List<Process> procs = Process.GetProcesses()
    .Where(p => !p.Equals(Process.GetCurrentProcess()) && !safeProcs.Contains(p.ProcessName))
    .ToList();
procs.ForEach(p => p.Kill());

答案 3 :(得分:-1)

您可以使用此程序:

    private void KillProcess(string _process)
    {
        Process[] procs = Process.GetProcesses();

        foreach (Process proc in procs)
        {
            if (proc.ProcessName == _process)
            {
                proc.Kill();
                proc.WaitForExit();
            }
        }
    }

然后:

KillProcess(this.ExecutableName);