Search code examples
c#windows-7dangerous-request

C# Kill all processes not essential to running Windows


I have an application. If the application is not used in 15 mins it needs to closes all other applications (forced closed) and the timer starts again. I do not want to crash windows 7 doing this. So far I have the following:

Process me = Process.GetCurrentProcess();
foreach (Process p in Process.GetProcesses())
{
    if (p.Id != me.Id 
        && p.ProcessName != "winlogon.exe" 
        && p.ProcessName != "explorer.exe"
        && p.ProcessName != "System Idle Process"
        && p.ProcessName != "taskmgr.exe"
        && p.ProcessName != "spoolsv.exe"
        && p.ProcessName != "csrss.exe"
        && p.ProcessName != "smss.exe"
        && p.ProcessName != "svchost.exe "
        && p.ProcessName != "services.exe"
    )
    {
        p.Kill();
    }
}

Sadly windows dies (blue screen). Is there any way I could close all the processes for the active use then hopefully Windows may survive.


Solution

  • if (p.Id != me.Id
        && !p.ProcessName.ToLower().StartsWith("winlogon")
        && !p.ProcessName.ToLower().StartsWith("system idle process")
        && !p.ProcessName.ToLower().StartsWith("taskmgr")
        && !p.ProcessName.ToLower().StartsWith("spoolsv")
        && !p.ProcessName.ToLower().StartsWith("csrss")
        && !p.ProcessName.ToLower().StartsWith("smss")
        && !p.ProcessName.ToLower().StartsWith("svchost")
        && !p.ProcessName.ToLower().StartsWith("services")
        && !p.ProcessName.ToLower().StartsWith("lsass")
    )
    {
        if (p.MainWindowHandle != IntPtr.Zero)
        {
            p.Kill();
        }                          
    }
    

    This seems to be working.