0

请帮助我,因为我需要远程终止/重新启动进程。

我已经尝试过了,但对我来说没有运气。错误是 - “无法连接到远程机器”

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

2 回答 2

4

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

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

祝你好运。

于 2012-10-04T13:45:55.577 回答
0

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

<identity impersonate="true" userName="UserWithPermissions" password="pw" />
于 2013-06-07T20:10:37.203 回答