3

我有一组命令,例如:

C:
cd Project
testproj.exe

我的系统从远程系统中一一获取这些命令。从远程系统接收到命令后,我需要执行 cmd.exe 中的每个命令。如何使用.NET 执行这些?

我还需要将 testproj.exe 的结果返回到远程机器。运行命令后如何获取结果?

4

5 回答 5

6

Process.Startcmd.exe,并挂钩 StandardIn、StandardOut 和 StandardError。然后,当命令进入时,只需将其写入 StandardIn 并读取 StandardOut/Error 即可返回。整个事情不应该超过15 LOC。

话虽如此,仅安装 Telnet 服务器可能会更容易 - 因为听起来这就是您本质上要复制的内容......

于 2009-08-06T00:45:06.863 回答
5
var process = System.Diagnostics.Process.Start( "testproj.exe" );
process.WaitForExit();
var result = process.ExitCode;

这不会真正尊重诸如“C:”或“CD 路径”之类的东西。相反,您希望在临时文件夹中创建一个批处理文件,然后调用该批处理文件。

于 2009-08-06T00:08:29.437 回答
4

看看System.Diagnostics.Process。您可以将 stdout/stderr 重定向到某处以获取输出。

于 2009-08-06T00:07:58.173 回答
1

C:cd Project操作可以在 lanching 应用程序中使用 SetCurrentDirectory 方法使用Directory完成

然后只需使用Process类来启动testproj.exe可执行文件。

于 2009-08-06T00:10:10.213 回答
1

与其尝试支持 DOS 的所有命令,不如只实现一个小子集,以保证不会出错。像不允许 DELETE、RD、FORMAT 等。

所以,基本上你只有 DOS 命令的一个子集。获得命令集后,您可以使用扩展机制或作为可插入模块为这些特定命令编写代码。

这也将帮助您保护您的机器免受恶意攻击,最坏的情况是可能有数据从机器发送出去,但数据/系统永远不会受到损害。

更新:具体命令的实现留给您。您可以使用 .NET API 或拥有 System.Diagnostics.Process

于 2009-08-06T00:16:27.563 回答