.NET – 将可执行文件跨LAN复制到另一台计算机并执行它
我正在使用.NET,并且疯狂地试图找到任何有用的API,它允许我通过LAN网络传输文件(当然通过管理员凭据),然后在该机器上执行它。
我已经阅读了一些使用WMI的东西,但谷歌搜索“.net WMI复制文件”或“.net WMI执行文件”并没有帮助我。
任何参考将不胜感激。
编辑
我不能使用像PsExec这样的第三方工具(虽然它完全符合我的要求)。 这是因为PsExec涉及的许可证我不能用我的应用程序分发它。
我不认为这很容易实现。 但是,您可以使用.net复制exe。 然后(也来自.net,使用Process.Start
)调用psExec并使其远程执行程序。
我知道这已经有好几年了,但遇到了这个挑战并且在这篇文章(以及其他内容)中出现了,所以要分享解决方案以防止任何人前进。 它可用于通过WMI移动您想要的任何文件。
解:
1:将EXE转换为Base64
byte[] bytes = File.ReadAllBytes(pathToExe); String file = Convert.ToBase64String(bytes);
2:通过WMI Echo Base64到文件并使用certutil进行解码
ConnectionOptions co = new ConnectionOptions(); // isLocal is a variable indicating whether machine name/IP is local if (!isLocal) { co.Username = "domainOrMachineaccountName"; co.Password = "password for account"; co.EnablePrivileges = true; co.Impersonation = ImpersonationLevel.Impersonate; } //ip is a vaiable holding the target endpoint ManagementScope s = new ManagementScope(@"\" + ip + @"rootcimv2", co); s.open(); ObjectGetOptions ogo = new ObjectGetOptions(); ManagementClass prog = new ManagementClass(s, new ManagementPath("Win32_Process"), ogo); ManagementBaseObject mbo = prog.GetMethodParameters("Create"); mbo["CommandLine"] = @"cmd /c ""echo " + base64String + @" > c:windowstempb64_exec.txt && certutil -decode c:windowstempb64_exec.txt c:windowstempb64_exec.exe && c:windowstempb64_exec.exe"""; prog.InvokeMethod("Create", mbo, null);
现在,有一些需要突出的问题
在我的情况下,我不想一次发送一个完整的2MB文件7000个字符,所以我创建了一个简单的.net下载器,编译成小于6KB并将其全部放入一个语句中(如上所述)。下载我的可执行文件并在完成时(当我看到我想要的文件时,通过WMI查询)我只是通过WMI删除它。
在未启用PowerShell 2.0远程处理的计算机上 ,我发现PsExec命令行工具非常有用。 它需要远程计算机上的管理权限。
将应用程序代码复制到远程计算机后,您可以考虑使用Scheduler服务(AT命令)来启动应用程序(请参阅http://msdn.microsoft.com/en-us/library/aa384006.aspx )。
上述就是C#学习教程:.NET – 将可执行文件跨LAN复制到另一台计算机并执行它分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ctvol.com/cdevelopment/1012871.html