C# WMI 远程程序无法正确执行
C# WMI remote program doesn't execute correctly
我正在尝试使用 WMI 在远程服务器上执行程序。
当我执行我的代码时,我可以看到可执行文件出现在远程服务器上任务管理器的“进程”选项卡中,但它从未真正执行过它的功能。当它 运行 正确时,特定文件夹中应该有一些文件,但是当我从我的程序 运行 时,它有 none。
此外,我检查了从 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 执行成功。现在没有创建文件的问题是因为远程进程创建方法在 session 0 中运行进程。这是一个非交互式桌面会话。
这可能会限制 access/privilege 进程访问文件系统。这就是为什么您没有收到任何错误,但只是忽略了流程中的操作。您需要在连接选项中明确指定它以启用特权:
ConnectionOptions connection = new ConnectionOptions() {
EnablePrivileges = true
};
如果用于连接的用户有足够的权限,这将授予对文件系统的访问权限。
我正在回答这个问题,所以我可以将其标记为 MethodMan 的答案。他是对的,我们的服务器团队说它已关闭。
我正在尝试使用 WMI 在远程服务器上执行程序。
当我执行我的代码时,我可以看到可执行文件出现在远程服务器上任务管理器的“进程”选项卡中,但它从未真正执行过它的功能。当它 运行 正确时,特定文件夹中应该有一些文件,但是当我从我的程序 运行 时,它有 none。
此外,我检查了从 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 执行成功。现在没有创建文件的问题是因为远程进程创建方法在 session 0 中运行进程。这是一个非交互式桌面会话。
这可能会限制 access/privilege 进程访问文件系统。这就是为什么您没有收到任何错误,但只是忽略了流程中的操作。您需要在连接选项中明确指定它以启用特权:
ConnectionOptions connection = new ConnectionOptions() {
EnablePrivileges = true
};
如果用于连接的用户有足够的权限,这将授予对文件系统的访问权限。
我正在回答这个问题,所以我可以将其标记为 MethodMan 的答案。他是对的,我们的服务器团队说它已关闭。