C# 在远程设备上运行远程exe

C# 在远程设备上运行远程exe,c#,wmi,remote-execution,C#,Wmi,Remote Execution,我被一个可能不容易解决的问题困住了,但我希望有人能帮助我。我试图运行exe在远程设备上安装一些软件(SCCM客户端) 因此,我正在从我的PC(主机1)运行程序,以连接到远程设备(主机2),并指示该设备从服务器运行exe 我一直在使用标准的远程执行WMI代码,但运气不佳: ConnectionOptions connOptions = new ConnectionOptions(); connOptions.Impersonation = ImpersonationLevel.Impersonat

我被一个可能不容易解决的问题困住了,但我希望有人能帮助我。我试图运行exe在远程设备上安装一些软件(SCCM客户端)

因此,我正在从我的PC(主机1)运行程序,以连接到远程设备(主机2),并指示该设备从服务器运行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


不幸的是,我不知所措-在禁用Admin$和C$时,是否可以使用Win32_Process.Create方法来运行UNC exe,或者是否可以将exe甚至其所在的文件夹复制到主机设备?我试图避免使用psexec,老实说,我想知道使用它是否会遇到同样的问题。

您不能在远程计算机上部署自定义Windows服务应用程序吗?通过这种方式,您只需使用您想要的任何渠道与服务通信,然后从那里运行可执行文件。

您的UNC路径开始处缺少的“\”是问题中的一个输入错误吗?我相信如果$admin被禁用,那么psexec也不会工作,因为它使用它将自身复制到目标机器上……是的,这是上面的一个输入错误-代码不能通过这种方式。我可能缺少一个权限块,或者我没有正确地通过权限?我运行代码的帐户在所有3个设备上都有管理员权限,并在服务器共享上读取/执行。这可能比我们试图实现的要复杂一些。这对于一些遗留系统来说更像是一个快速修复,但很快就会变得比我们希望的更麻烦。但我明白你的意思,听起来确实很有趣。我可以再调查一下。