使用asp.net远程杀死进程

时间:2012-10-04 13:39:20

标签: c# asp.net remote-server

请帮助我,因为我需要远程杀死/重启进程。

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

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

我希望有人能为此提供解决方案。谢谢!

2 个答案:

答案 0 :(得分:4)

嗯,错误实际上是在告诉你到底出了什么问题。您的应用程序连接到远程计算机失败。这可能由于某些原因而发生:

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

答案 1 :(得分:0)

使用相应的帐户(具有权限的帐户)将其添加到web.config

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