2014-09-08 4 views
8

पर प्रक्रिया को मारें मैं दूरस्थ मशीन पर एक प्रक्रिया को मारने की कोशिश कर रहा हूं। लेकिन मुझे त्रुटि मिलती है। मैं गलत क्या कर रहा हूं और मैं यह काम कैसे कर सकता हूं?रिमोट मशीन

मेरे कोड:

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(); 
    } 

बस ImpersonateUser स्पष्ट करने के लिए, यह मेरे सही उपयोगकर्ता अधिकार के साथ रिमोट मशीन के लिए लॉग इन करता है। तो समस्या वहाँ नहीं है। जब मैं प्रक्रिया ऑब्जेक्ट को डीबग और जांचता हूं तो मुझे इस मामले में नोटपैड के लिए सही प्रक्रिया आईडी मिलती है। तो कनेक्शन ठीक काम करता है। लेकिन जब मैं इस प्रक्रिया को मारने की कोशिश मैं इस त्रुटि मिलती है:

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

। यह विधि केवल स्थानीय कंप्यूटर पर चल रही प्रक्रियाओं के लिए उपलब्ध है।] (Http://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill%28v=vs.110%29.aspx) – JoelC

+0

डुप्लिकेट - http://stackoverflow.com/questions/348112/kill-a-process-on-a-remote-machine-in-c-sharp?rq=1 – vapcguy

उत्तर

16

System.Diagnostics.Process वर्ग एक दूरस्थ प्रक्रिया को नहीं मार सकते हैं। WMI का उपयोग करने के लिए आप System.Management नेमस्पेस (संदर्भ सेट करना सुनिश्चित करें) का उपयोग कर सकते हैं।

एक साधारण उदाहरण नीचे है। Micrsoft के दस्तावेज़ से `Process.Kill` ​​पर: [आपको लगता है कि किसी दूरस्थ कंप्यूटर पर चल रहा है एक प्रक्रिया के लिए मार डालो कॉल करने के लिए प्रयास कर रहे हैं

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 को हल करने में असमर्थ" – MrProgram

+0

मैंने अपडेट किया है कोड। मैंने 'var' का उपयोग किया जहां मुझे नहीं होना चाहिए था। –

संबंधित मुद्दे