C#WMI远程程序无法正确执行

时间:2016-05-12 19:41:36

标签: c# wmi

我正在尝试使用WMI在远程服务器上执行程序。

当我执行我的代码时,我可以看到可执行文件出现在远程服务器上的任务管理器的“进程”选项卡中,但它实际上从未执行过它的功能。正确运行时,特定文件夹中应该有一些文件,但是当我从程序中运行它时没有。

另外,我检查从WMI报告的结果,我得到的代码为0,我相信这表明没有错误。

我已经发布了以下代码。如果我的代码中的某些内容没有明显错误,那么我将非常感谢有关如何解决此问题的建议,因为我是WMI流程的新手。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.IO;
using System.Configuration;
using System.Diagnostics;
using System.Management;

namespace ExecuteNetworkResources
{
    class Program
    {
        static void Main(string[] args)
        {
            var processToRun = new[] { "C:\\Program Files\\TestApplication\\mscombine.exe -c -cwa" };
            var connection = new ConnectionOptions();
            connection.Username = "domain\\user1;
            connection.Password = "password";
            var wmiScope = new ManagementScope(String.Format(@"\\{0}\root\cimv2", "Server1"), connection);
            var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
            object result = wmiProcess.InvokeMethod("Create", processToRun);
            Console.WriteLine("Returned: " + result);
            Console.ReadLine();

        }
    }
}

2 个答案:

答案 0 :(得分:1)

您可以在远程计算机的任务管理器中看到进程意味着WMI执行成功。现在,未创建文件的问题是因为远程进程create方法在 session 0 中运行该进程。这是一个非交互式桌面会话。

这可能会限制进程访问文件系统的访问权限。这就是为什么你没有收到任何错误,但是过程中的操作被忽略了。您需要在连接选项中明确指定它以启用previleges:

        ConnectionOptions connection = new ConnectionOptions() {
            EnablePrivileges = true
        };

如果用于连接的用户具有足够的权限,则可以访问文件系统。

答案 1 :(得分:0)

我正在回答这个问题,所以我可以将它标记为MethodMan的答案。他是对的,我们的服务器团队表示已关闭。