【问题标题】:System.Diagnostics.Process from ManagementBaseObject来自 ManagementBaseObject 的 System.Diagnostics.Process
【发布时间】:2011-09-09 17:55:29
【问题描述】:

我正在使用 WMI 执行一个远程进程,并希望将该进程的 StandardOutput 重定向回我的程序。我找到了这些代码示例:

http://haripotter.wordpress.com/2008/07/25/executing-a-command-on-a-remote-windows-system-using-wmi/

那个人正在使用我在这里看到的 Process 类:

http://msdn.microsoft.com/en-us/library/ssk42c11.aspx

可以重定向标准输出。这两个可以一起用吗?

我是这样调用它的:

 public string StartProcess(string command)
    {
        ManagementClass processTask = new ManagementClass(@"\\" + this.wmiConnection.machineName + @"\root\CIMV2", "Win32_Process", null);
        ManagementBaseObject methodParams = processTask.GetMethodParameters("Create");
        methodParams["CommandLine"] = command;
        methodParams["CurrentDirectory"] = @"C:\";


        try
        {
            ManagementBaseObject exitCode = processTask.InvokeMethod("Create", methodParams, null);

【问题讨论】:

标签: c# .net vb.net wmi


【解决方案1】:

我认为您对此有些困惑。不可能混合Win32_Process WMI 类(或任何)和System.Diagnostics.Process 类,它们都属于不同的范围。关于您的另一个问题,我认为您在这里运气不好,因为使用System.Diagnostics.Process 类您可以重定向标准输出但不允许执行远程进程,而使用Win32_Process WMI 类您可以执行远程进程(有限制)但不允许重定向标准输出。

【讨论】:

  • 那么有没有办法让远程进程的输出返回到我的程序中?
  • 当然可以,但是您需要自己构建客户端-服务器应用程序来向远程机器(服务器)发送命令并在客户端接收输出。
  • 0.02 美元的解决方案是使用 cmd.exe 将输出重定向到一个文件,然后在进程完成后读取该文件。
  • @Hans 是的,您可以这样做,但是如何获取位于服务器计算机中的文件的内容?
  • 回不来的回旋镖是一根棍子。无法获取文件的服务器是一块砖;)
猜你喜欢
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
  • 2013-08-28
  • 2011-02-05
相关资源
最近更新 更多