2014-09-08 48 views
8

Uzaktaki bir makinede bir işlemi durdurmaya çalışıyorum. Ama hata alıyorum. Neyi yanlış yapıyorum ve bu işi nasıl yapabilirim?Uzak makinedeki işlemi sonlandırın

Kodum:

var iu = new ImpersonateUser(); 
    try 
    { 
     iu.Impersonate(Domain, _userName, _pass); 

     foreach (var process in Process.GetProcessesByName("notepad", "RemoteMachine")) 

     { 
      string processPath = pathToExe; //Is set as constant (and is correct) 
      process.Kill(); 
      Thread.Sleep(3000); 
      Process.Start(processPath); 
     } 

    } 
    catch (Exception ex) 
    { 
     lblStatus.Text = ex.ToString(); 
    } 
    finally 
    { 
     iu.Undo(); 
    } 

Sadece ImpersonateUser netleştirmek için, benim doğru kullanıcı hakları olan uzaktan makineye giriş yapar. Yani sorun orada değil. Hata ayıkladığımda ve işlem nesnesini kontrol ettiğimde, bu durumda not defteri için doğru işlem kimliğini buluyorum. Yani bağlantı iyi çalışıyor. Ben sürecini öldürmeye çalışırken Ama bu hatayı alıyorum:

System.NotSupportedException: Feature is not supported for remote machines. at System.Diagnostics.Process.EnsureState 
+0

. Yöntem yalnızca yerel bilgisayarda çalışan işlemler için kullanılabilir.] (Http://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill%28v=vs.110%29.aspx) – JoelC

+0

Duplicate - http://stackoverflow.com/questions/348112/kill-a-process-on-a-remote-machine-in-c-sharp?rq=1 – vapcguy

cevap

16

System.Diagnostics.Process sınıf bir uzak süreci öldüremem. WMI kullanmak için System.Management ad alanını kullanabilirsiniz (bir referans ayarladığınızdan emin olun).

Basit bir örnek aşağıdadır. Micrsoft belgelerine itibaren Process.Kill` ​​`tarih:: [Sen uzak bir bilgisayarda çalışan bir işlem için Öldür aramaya çalışıyorsunuz sildim önceki dışı cevap itibaren

var processName = "iexplore.exe"; 

var connectoptions = new ConnectionOptions(); 
connectoptions.Username = @"YourDomainName\UserName"; 
connectoptions.Password = "User Password"; 

string ipAddress = "192.168.206.53"; 
ManagementScope scope = new ManagementScope(@"\\" + ipAddress + @"\root\cimv2", connectoptions); 

// WMI query 
var query = new SelectQuery("select * from Win32_process where name = '" + processName + "'"); 

using (var searcher = new ManagementObjectSearcher(scope, query)) 
{ 
    foreach (ManagementObject process in searcher.Get()) // this is the fixed line 
    { 
     process.InvokeMethod("Terminate", null); 
    } 
} 
Console.ReadLine(); 
+0

"InvokeMethod sembolü çözülemiyor" – MrProgram

+0

Güncellemeyi ettik. kod Yapmamam gereken yerde vardım. –

İlgili konular