我有一组命令,例如:
C:
cd Project
testproj.exe
我的系统从远程系统中一一获取这些命令。从远程系统接收到命令后,我需要执行 cmd.exe 中的每个命令。如何使用.NET 执行这些?
我还需要将 testproj.exe 的结果返回到远程机器。运行命令后如何获取结果?
Process.Start
cmd.exe,并挂钩 StandardIn、StandardOut 和 StandardError。然后,当命令进入时,只需将其写入 StandardIn 并读取 StandardOut/Error 即可返回。整个事情不应该超过15 LOC。
话虽如此,仅安装 Telnet 服务器可能会更容易 - 因为听起来这就是您本质上要复制的内容......
var process = System.Diagnostics.Process.Start( "testproj.exe" );
process.WaitForExit();
var result = process.ExitCode;
这不会真正尊重诸如“C:”或“CD 路径”之类的东西。相反,您希望在临时文件夹中创建一个批处理文件,然后调用该批处理文件。
看看System.Diagnostics.Process。您可以将 stdout/stderr 重定向到某处以获取输出。
C:和cd Project操作可以在 lanching 应用程序中使用 SetCurrentDirectory 方法使用Directory类来完成。
然后只需使用Process类来启动testproj.exe可执行文件。
与其尝试支持 DOS 的所有命令,不如只实现一个小子集,以保证不会出错。像不允许 DELETE、RD、FORMAT 等。
所以,基本上你只有 DOS 命令的一个子集。获得命令集后,您可以使用扩展机制或作为可插入模块为这些特定命令编写代码。
这也将帮助您保护您的机器免受恶意攻击,最坏的情况是可能有数据从机器发送出去,但数据/系统永远不会受到损害。
更新:具体命令的实现留给您。您可以使用 .NET API 或拥有 System.Diagnostics.Process