2012-10-04 103 views
0

请帮助我,因为我需要远程杀死/重启进程。使用asp.net远程杀死进程

我已经试过这个,但没有运气给我。错误是 - “无法连接到远程计算机”

Process[] prs = Process.GetProcesses("SERVERNAME"); 

    foreach (Process pr in prs) 
    { 
     if (pr.ProcessName == "process") 
     { 
      pr.Kill(); 
     } 
    } 

我也试试这一个,但仍然无法正常工作,并得到这个错误: “访问被拒绝(异常来自HRESULT:0X80070005(E_ACCESSDENIED)。 )“

ManagementScope scope = new ManagementScope("\\\\SERVERNAME\\root\\cimv2"); 
scope.Connect(); 
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Process WHERE Name='process'"); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); 
ManagementObjectCollection objectCollection = searcher.Get(); 

    foreach (ManagementObject managementObject in objectCollection) 
     { 
     managementObject.InvokeMethod("Terminate", null); 
     } 

我希望有人对此有一个解决方案。提前感谢!

回答

4

那么,错误实际上告诉你到底什么是错的。您的应用程序无法连接到远程计算机。发生这种情况的一些原因:

  1. 远程计算机是不可用(不存在)
  2. 远程计算机没有WMI开放远程连接,或者是防火墙版的远程计算机上或办法。
  3. 您没有执行此操作的权限。由于我没有看到代码模拟中的任何地方,因此连接将使用当前进程令牌(它是哪个帐户?取决于您在应用程序池上的配置,或者如果使用标记,则取决于您的web.config中的情况) - 这是NT AUTHORITY)。您可能没有权限使用WMI和正在运行的凭据访问远程计算机。它可以通过在您的代码中,在web.config中或在应用程序池设置中对具有足够权限的帐户(如果您处于域中,请向您的IT部门申请帐户)进行模拟来解决。

祝你好运。

0

使用适当的帐户(具有权限的帐户)将此帐户添加到您的web.config

<identity impersonate="true" userName="UserWithPermissions" password="pw" />