2010-12-29 3 views
2

Мой фрагмент кода, как это: -Как я могу различать инициируемые пользователем и инициированные системой процессы?

KillUserProcess() 
{ 
    foreach (Process myProcess in Process.GetProcesses()) 
    { 
     // here I need to know which is system process and which is user process: 
     like --if(myProcess.type==user) 
       myProcess.Kill(); 
} 

на самом деле я хочу, чтобы остановить все инициированные пользователем процессы, но не системные инициированные процессы.

+3

Почему на земле вы хотели бы сделать это? Вы бы убили свой собственный процесс, explorer.exe, важные процессы, некоторые из которых помещают иконку в лоток, и кто знает, что еще. – fejesjoco

+3

Как вы определяете «системный процесс?»? Что-то началось с системы? Не все процессы, начатые системой так или иначе? – cdhowie

+1

Вот довольно простой способ определить владельца процесса с помощью WMI: http://groups.google.com/group/microsoft.public.dotnet.languages.csharp/browse_thread/thread/71ca5def3013974a/2a6272a9b7ecd77b?lnk=st&q = user + is + using + which + process + wmi + coad & rnum = 1 & pli = 1 – Brad

ответ

2

Чтобы убить большинство процессов по инициативе пользователя:

System.Diagnostics.Process.Start("shutdown -l"); 
+0

Можно ли полагаться на shutdown.exe? Всегда ли это будет на пути? Будут ли у всех ОС, запускающих эту программу? – Brad

+0

Ох. Вы действительно хотели * выйти * с текущего пользователя? –

+0

@Cody, Если вы убьете все «инициированные пользователем процессы», это результат, не так ли? – GvS

2

Найдено здесь, на Bytes.com: Get Process Account Name.

Вы можете использовать System.Management и класс Win32_Process.

using System; 
using System.Management; 
using System.Diagnostics; 
class App { 
    public static void Main() { 
    GetProcessInfo(Process.GetCurrentProcess().Handle. ToInt32()); 
    } 

    static void GetProcessInfo(int handle) 
    { 
     using(ManagementObject proc = new ManagementObject("Win32_Process.Handle='" + handle.ToString() + "'")) 
     { 
      proc.Get(); 
      string[] s = new String[2]; 
      //Invoke the method and populate the array with the user name and domain 
      proc.InvokeMethod("GetOwner",(object[])s); 
      Console.WriteLine("User: " + s[1]+ "\\" + s[0]); 
     } 
    } 
} 
Смежные вопросы