【发布时间】:2009-08-06 00:03:25
【问题描述】:
我有一组命令,例如:
C:
cd Project
testproj.exe
我的系统从远程系统一一获取这些命令。 从远程系统接收到命令后,我需要执行 cmd.exe 中的每个命令。如何使用.NET 执行这些?
我还需要将 testproj.exe 的结果返回到远程机器。运行命令后如何取结果?
【问题讨论】:
我有一组命令,例如:
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 操作可以使用 Directory 类使用 SetCurrentDirectory 在 lanching 应用程序中完成strong> 方法。
然后只需使用 Process 类来启动 testproj.exe 可执行文件。
【讨论】:
与其尝试支持 DOS 的所有命令,不如只实现一个小子集,以保证不会出错。比如不允许 DELETE、RD、FORMAT 等。
所以,基本上你只有 DOS 命令的一个子集。获得命令集后,您可以使用扩展机制或作为可插入模块为这些特定命令编写代码。
这也将帮助您保护您的机器免受恶意攻击,最糟糕的情况是可能有数据从机器发送出去,但数据/系统永远不会受到损害。
更新:具体命令的实现留给您。您可以使用 .NET API 或 System.Diagnostics.Process
【讨论】: