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

3
我正在尝试使用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();

        }
    }
}

远程服务器是否启用了WMI,您可以进行远程调试吗?如果没有,则重构代码以添加一些日志记录和错误捕获。这不应该花费太长时间来实现几行代码。此外,请联系远程服务器管理员并查看他们是否已启用WMI,可能是您本地机器之外的权限问题。 - MethodMan
2个回答

1
您可以在远程计算机的任务管理器中看到进程,这意味着WMI执行成功。现在问题在于文件没有被创建,这是因为远程进程创建方法在session 0中运行。它是一个非交互式桌面会话。
这可能会限制进程访问文件系统的访问/权限。这就是为什么您没有收到任何错误消息,但是进程的操作只是被忽略了。您需要在连接选项中显式指定以启用特权。
        ConnectionOptions connection = new ConnectionOptions() {
            EnablePrivileges = true
        };

如果连接使用的用户具有足够的权限,这将提供对文件系统的访问。

我会尽快尝试并提供反馈。 - WorkJ
WMI已关闭,但我还是点赞了这个帖子,因为我在我的代码中没有涉及到它,而且它对于建立良好的连接非常相关。不过,如果WMI关闭了,我不明白如何连接并查看应用程序。 - WorkJ
你提到它在远程机器上调用进程,所以我假设这是来自工作代码的示例片段。我观察到还有一件事情缺失在这里,那就是"wmiScope.Connect();"方法的调用。 - vendettamit

0

我回答这个问题是为了将其标记为MethodMan的答案。他是正确的,我们的服务器团队说它已经关闭了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接