我在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一些文字> myfile.txt的
它完美无瑕。但是,当我使用代码启动调用相同批处理文件的EXE时,EXE会启动,但bat文件永远不会运行。
如果我直接双击EXE,它会启动批处理文件。
所以我的问题是这个。 WMI功能是否阻止从名为?
的原始EXE调用其他可执行文件或批处理答案 0 :(得分:0)
确定。找出问题所在。 我必须首先cd到目录并在那里运行它。如果我把它全部送到完整的路径,就找不到它。
string exe = string.Format(@"cmd.exe /c cd C:\temp\Myfolder" + @" &RunTestbat.exe");