我有一组类似以下的命令:
C:
cd Project
testproj.exe
我的系统从远程系统逐个获取这些命令。当接收到来自远程系统的命令时,我需要在cmd.exe中执行每个命令。如何使用.NET执行这些命令?
我还需要将testproj.exe的结果返回给远程机器。运行命令后如何获取结果?
Process.Start
启动 cmd.exe,并钩取 StandardIn、StandardOut 和 StandardError。然后,当命令进来时,只需将其写入 StandardIn 并读取 StandardOut/Error 以获取返回值。整个过程不应超过15行代码。
话虽如此,安装 Telnet 服务器可能更容易 - 因为这似乎是您要复制的内容....
var process = System.Diagnostics.Process.Start( "testproj.exe" );
process.WaitForExit();
var result = process.ExitCode;
这并不会识别"C:"或"CD路径"之类的内容。相反,您应该在临时文件夹中创建批处理文件,然后调用该批处理文件。
在启动应用程序中,可以使用Directory类的SetCurrentDirectory方法来执行C:和cd Project操作。
然后,只需使用Process类来启动testproj.exe可执行文件。
不要试图支持DOS的所有命令,只需实现一个小的子集即可保证不会出错。比如不允许使用DELETE、RD、FORMAT等命令。
因此,您只需要拥有DOS命令的子集。一旦您拥有了命令集,就可以使用扩展机制或可插拔模块为这些特定的命令编写代码。
这也将帮助您保护计算机免受恶意攻击,最糟糕的情况是可能会发送数据,但从计算机中,数据/系统永远不会受到伤害。
更新:具体命令的实现留给您。您可以使用.NET API或System.Diagnostics.Process。