【发布时间】:2018-03-12 16:47:23
【问题描述】:
我的 C# 应用程序中有以下代码,用于在远程客户端上运行 EXE 或任何其他命令。我尽量不依赖 psexec 或其他工具。
public static void ConnectToRemoteClient(string client_machine, string target_exe )
{
var connection = new ConnectionOptions();
object[] theProcessToRun = { target_exe };
var wmiScope = new ManagementScope($@"\\{client_machine}\root\cimv2", connection);
wmiScope.Connect();
using (var managementClass = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions()))
{
managementClass.InvokeMethod("Create", theProcessToRun );
}
}
使用示例如下:
string exe = string.Format(@"cmd.exe /c C:\temp\Myfolder\test.bat");
ConnectToRemoteClient("ClientMachine", exe);
test.bat 只是回显到一个文件作为测试,看看远程执行是否有效。
示例:echo Some text > myfile.txt
它完美无缺。但是,当我使用代码启动调用同一个批处理文件的 EXE 时,EXE 会启动,但 bat 文件永远不会运行。
如果我直接双击 EXE,它会启动批处理文件。
所以我的问题是这样的。 WMI 功能是否阻止从调用的原始 EXE 调用其他可执行文件或批处理?
【问题讨论】:
标签: wmi remote-access