【问题标题】:C# Console app standard input not usable by other program?C# 控制台应用程序标准输入不能被其他程序使用?
【发布时间】:2020-07-19 21:42:21
【问题描述】:
using (Stream stdin = Console.OpenStandardInput())
        {
            using (Stream stdout = Console.OpenStandardOutput())
            {
                byte[] buffer = new byte[2048];
                int bytes;
                while ((bytes = stdin.Read(buffer, 0, buffer.Length)) > 0)
                {
                    stdout.Write(buffer, 0, bytes);
                }
            }
        }

这段代码是从标准输入到标准输出的基本回显,当我直接写入控制台时它可以工作。但是当我尝试使用另一个程序(在本例中是使用 ActionScript 3 的 AIR 游戏)写入标准输入时,它无法正常工作。

我已经使用 AS3 的 NativeProcess 启动了 C# 应用程序。它让我启动一个进程并访问它的标准输入/输出。从标准输出读取工作正常,但写入标准输入无济于事。

这是写入标准输入的 AS3 代码:

我不知道为什么这不起作用。我在 C# 应用程序上尝试了几种不同的读取方法,但没有捕获我通过标准输入发送的数据。

C# 应用程序标准输入:

C# 应用程序标准输出:

对于为什么这不起作用的任何帮助,我将不胜感激。谢谢!

【问题讨论】:

  • 你能stdin吗?在我看来,stdin 是只读的,而 stdoutstderr 是只写的。每当我想将它们粘合在一起时,我都会使用管道
  • 所问的问题没有意义,因为您不能 write 到您自己的应用程序的 input...寻找stackoverflow.com/questions/2613161/… - 一些edit 的帖子可能会阐明您在寻找什么。
  • standardInput 是 c# 应用程序的输出,而standardOutput 是 c# 应用程序的输入。这就是 NativeProcess 的行为方式,我将添加一些图片来说明。
  • 为什么使用writeUTF( value: "hello" ); 而不是正确的writeUTF( "hello" );?无论如何,使用 Net 3.5 解决了这个问题吗?我在我的开发计算机上看到 Net 4.7,但还没有机会尝试您的 DLL 问题(eg: 对于这个特定任务,它可能确实需要版本3.5)。有机会我会更新的。
  • @Flydog57,再读一遍,上面写着 "write to the stdin using another program"。我认为您假设 C# 启动了该进程,但实际上另一个程序正在将此 C# exe 作为子进程运行。来自 AS3 文档:process.standardInput.writeUTF("foo");(参见communicating with an external process 部分)因为AS3 manual“使用此管道将数据发送到此进程。”

标签: c# actionscript-3 streamreader


【解决方案1】:

事实证明,您无法在当前的 .NET 框架上执行此操作。您必须在 3.5 或更低

这是我找到的答案。 AIR NativeProcess standardInput not connecting to app

编辑: 即使将我的 .NET 框架更改为 3.5 甚至 3.0,我也无法让它工作。经过一整天的调试,我放弃了,所以我继续在 C# 应用程序上实现了一个简单的 TCP 客户端,并在 Flash 游戏中实现了一个服务器。完美无缺,但有点不必要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2014-03-17
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多