【问题标题】:Run a DOS command in .NET在 .NET 中运行 DOS 命令
【发布时间】:2009-08-06 00:03:25
【问题描述】:

我有一组命令,例如:

C:
cd Project
testproj.exe

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

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

【问题讨论】:

    标签: c# .net dos


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
      var process = System.Diagnostics.Process.Start( "testproj.exe" );
      process.WaitForExit();
      var result = process.ExitCode;
      

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

      【讨论】:

      • 这行不通。你需要一个 process.WaitForExit() 来获取 ExitCode。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

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

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

          【讨论】:

            猜你喜欢
            • 2013-06-07
            • 1970-01-01
            • 2015-09-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-24
            • 2012-06-16
            • 1970-01-01
            相关资源
            最近更新 更多