C# 在C中终止远程计算机上的进程#

C# 在C中终止远程计算机上的进程#,c#,.net,process,kill,C#,.net,Process,Kill,仅帮助终止本地计算机上的进程。如何终止远程计算机上的进程?您可以使用。或者,如果您不介意使用外部可执行文件,请使用我使用以下代码。psKill也是一种很好的方法,但有时您需要检查其他一些东西,例如,在我的例子中,远程计算机运行同一进程的多个实例,但使用不同的命令行参数,所以下面的代码对我来说很有用 ConnectionOptions connectoptions = new ConnectionOptions(); connectoptions.Username = string.Format(

仅帮助终止本地计算机上的进程。如何终止远程计算机上的进程?

您可以使用。或者,如果您不介意使用外部可执行文件,请使用

我使用以下代码。psKill也是一种很好的方法,但有时您需要检查其他一些东西,例如,在我的例子中,远程计算机运行同一进程的多个实例,但使用不同的命令行参数,所以下面的代码对我来说很有用

ConnectionOptions connectoptions = new ConnectionOptions();
connectoptions.Username = string.Format(@"carpark\{0}", "domainOrWorkspace\RemoteUsername");
connectoptions.Password = "remoteComputersPasssword";

ManagementScope scope = new ManagementScope(@"\\" + ipAddress + @"\root\cimv2");
scope.Options = connectoptions;

SelectQuery query = new SelectQuery("select * from Win32_Process where name = 'MYPROCESS.EXE'");

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
{
       ManagementObjectCollection collection = searcher.Get();

       if (collection.Count > 0)
       {
           foreach (ManagementObject mo in collection)
           {
                uint processId = (uint)mo["ProcessId"];
                string commandLine = (string) mo["CommandLine"];

                string expectedCommandLine = string.Format("MYPROCESS.EXE {0} {1}", deviceId, deviceType);

                if (commandLine != null && commandLine.ToUpper() == expectedCommandLine.ToUpper())
                {
                     mo.InvokeMethod("Terminate", null);
                     break;
                }
            }
       }
}
我喜欢这样(类似于穆巴沙尔的回答):


我不知道pskill,它只是救了我一天!我在你的链接中没有看到任何说明它无法远程工作的内容。我是否遗漏了什么,或者您是否有文件表明它无法工作?
ManagementScope managementScope = new ManagementScope("\\\\servername\\root\\cimv2");
managementScope.Connect();
ObjectQuery objectQuery = new ObjectQuery("SELECT * FROM Win32_Process Where Name = 'processname'");
ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(managementScope, objectQuery);
ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get();
foreach (ManagementObject managementObject in managementObjectCollection)
{
    managementObject.InvokeMethod("Terminate", null);
}