无法执行远程进程

时间:2016-10-26 11:26:58

标签: c# wmi remote-access

我正在尝试使用Win32_Process在远程计算机上运行一些命令,但我无法让它工作。

这是我先试过的:

var processClass = new ManagementClass(@"\\server.domain.co.uk\root\cimv2:Win32_Process");

var inParams = processClass.GetMethodParameters("Create");
inParams["CommandLine"] = @"echo. 2>C:\users\user.name\desktop\EmptyFile.txt";
inParams["CurrentDirectory"] = @"C:\windows\system32";

var outParams = processClass.InvokeMethod("Create", inParams, null);

但没有任何反应。我也尝试在root\cimv2:Win32_Process本地运行它,但是再次没有效果。在调用notepad.exe而不是命令行时,我能够在本地工作,但这在远程计算机上不起作用。

我如何解决这个问题?

outParamsSystem.Management.ManagementBaseObject,我可以看到ClassPath包含值Evaluation timed out - 这可能是为什么它不是'工作?

1 个答案:

答案 0 :(得分:0)

在阅读并运行一些测试之后,它似乎与CScriptthese processes cannot be made interactive开始的类似:

  

您可以使用Win32_Process.Create在远程计算机上执行脚本或应用程序。但是,出于安全原因,该流程无法进行交互式。在本地计算机上调用Win32_Process.Create时,该过程可以是交互式的。

我仍然有点困惑,因为上面运行的代码没有出现在任务管理器中,但文章继续说:

  

远程进程没有用户界面,但列在任务管理器

无论哪种方式,这都符合我的需求,因为我正在运行一个shell命令 - 但值得注意的是,以这种方式执行cmd命令需要将它们格式化为:

cmd /c <command-goes-here>

在我的情况下,命令需要从特定位置运行,所以我需要传递:

cmd /c cd <path-to-executable> && <command-goes-here>