【问题标题】:Unable to Execute Remote Process无法执行远程进程
【发布时间】:2016-10-26 11:26:57
【问题描述】:

我正在尝试使用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 而不是命令行时,我能够让它在本地工作,但这在远程计算机上不起作用。

我怎样才能找出问题所在?

outParams 中,这是一个System.Management.ManagementBaseObject,我可以看到ClassPath 包含值Evaluation timed out - 这可以作为它为什么不起作用的线索吗?

【问题讨论】:

    标签: c# wmi remote-access


    【解决方案1】:

    在阅读并运行了一些测试之后,似乎与从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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-02
      • 2019-09-16
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      相关资源
      最近更新 更多