2008-12-07 6 views
2

This только помогает убивать процессы на локальной машине. Как убить процессы на удаленных машинах?Убить процесс на удаленной машине в C#

+0

Я не вижу ничего в вашей ссылке, указав, что он не будет работать удаленно. Я что-то пропустил или у вас есть документация о том, что это не сработает? – Terry 2014-04-10 19:59:28

ответ

10

Вы можете использовать wmi. Или, если вы не против использования внешнего исполняемого файла, используйте pskill

+0

любой пример кода? – Kiquenet 2011-07-21 21:37:52

1

Я использую следующий код. psKill также является хорошим способом, но иногда вам нужно проверить некоторые другие вещи, например, в моем случае на удаленной машине было запущено несколько экземпляров одного и того же процесса, но с разными аргументами командной строки, поэтому следующий код работал для меня.

ConnectionOptions connectoptions = new ConnectionOptions(); 
connectoptions.Username = string.Format(@"carpark\{0}", "domainOrWorkspace\RemoteUsername"); 
connectoptions.Password = "remoteComputersPasssword"; 

ManagementScope scope = new ManagementScope(@"\\" + ipAddress + @"\root\cimv2"); 
scope.Options = connectoptions; 

SelectQuery query = new SelectQuery("select * from Win32_Process where name = 'MYPROCESS.EXE'"); 

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query)) 
{ 
     ManagementObjectCollection collection = searcher.Get(); 

     if (collection.Count > 0) 
     { 
      foreach (ManagementObject mo in collection) 
      { 
       uint processId = (uint)mo["ProcessId"]; 
       string commandLine = (string) mo["CommandLine"]; 

       string expectedCommandLine = string.Format("MYPROCESS.EXE {0} {1}", deviceId, deviceType); 

       if (commandLine != null && commandLine.ToUpper() == expectedCommandLine.ToUpper()) 
       { 
        mo.InvokeMethod("Terminate", null); 
        break; 
       } 
      } 
     } 
} 
3

Мне это нравится (подобный ответ от Mubashar):

ManagementScope managementScope = new ManagementScope("\\\\servername\\root\\cimv2"); 
managementScope.Connect(); 
ObjectQuery objectQuery = new ObjectQuery("SELECT * FROM Win32_Process Where Name = 'processname'"); 
ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(managementScope, objectQuery); 
ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get(); 
foreach (ManagementObject managementObject in managementObjectCollection) 
{ 
    managementObject.InvokeMethod("Terminate", null); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^