我遇到了一个可能不容易解决的问题,但我希望有人能够提供帮助。 我正在尝试运行 exe 在远程设备上安装一些软件(SCCM 客户端)。
因此,我正在从我的 PC (Host1) 运行程序来连接到远程设备 (Host2) 并指示该设备从服务器运行 exe。
我一直在使用标准远程执行 WMI 代码,但没有成功:
ConnectionOptions connOptions = new ConnectionOptions();
connOptions.Impersonation = ImpersonationLevel.Impersonate;
connOptions.EnablePrivileges = true;
ManagementScope manScope = new ManagementScope(String.Format(@"\\{0}\ROOT\CIMV2", Host2), connOptions);
manScope.Connect();
if(manScope.IsConnected)
{
ObjectGetOptions objectGetOptions = new ObjectGetOptions();
ManagementPath managementPath = new ManagementPath("Win32_Process");
ManagementClass processClass = new ManagementClass(manScope, managementPath, objectGetOptions);
ManagementBaseObject inParams = processClass.GetMethodParameters("Create");
inParams["CommandLine"] = @sCommand;
ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null);
}
else
{
MessageBox.Show("An error occurerd while attempting to connect to WMI.");
}
我遇到的问题是当 exe 位于服务器上时执行 sCommand。 因此,当参数为“\server\share\program.exe”时,什么也不会发生。 当参数为“c:\Folder\program.exe”时,效果很好。不幸的是,我们所针对的这些设备禁用了 Admin$ 和 C$,并且其硬盘上没有 exe。
不幸的是,我不知所措 - 是否可以使用 Win32_Process.Create 方法来运行 UNC exe,或者当 Admin$ 和 C$ 是时是否可以将 exe 甚至它所在的文件夹复制到主机设备中残疾人? 我试图避免使用 psexec,而且我真的想知道使用它是否会遇到同样的问题。编辑:由于我无法控制的限制,我不允许在虚拟机上托管自定义窗口或 Http 服务并通过该服务进行交互。