c# - Azure 上的管道读取失败

标签 c# c++ .net azure pinvoke

我有一个旧应用程序,正在尝试在 Azure 工作线程下运行。该应用程序使用相当常见的模式来启动子进程,方法是创建匿名管道,将标准输出重定向到管道,生成子进程,然后使用管道进行通信。

为了让它在 Azure 下运行,我对 dll 进行了 P/Invoke 调用,以启动整个过程。

所有这些在 Azure 之外都可以正常工作,但即使在模拟器下运行也会失败。

在 Azure 下运行时,进程无法通过管道进行通信。具体来说,父级读取管道句柄的调用失败(超时)。

最佳答案

我终于发现问题是因为遗留代码复制了标准输出句柄以传递给子进程。

在 Azure 下运行时,STDOUT 的 GetStdHandle 返回 0x0。这基本上意味着“没有错误,但你没有 STDOUT”。显然,您需要检查 0x0 和 INVALID_HANDLE。

创建句柄,在启动子进程之前将它们设置在 STARTUPINFO 上,而不是复制现有的句柄,从而解决了所有问题。

关于c# - Azure 上的管道读取失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10659531/

相关文章:

c# - Restsharp - 响应对象中没有 cookie

c++ - 如何在C++中更改字符串中的字符

c# - Linq where in 子句

c# - Stream.Read什么时候返回?

.net - 查找 Json.NET 中的任意节点

c# - 如何在 Windows 时区和 IANA 时区之间进行转换?

c# - 是否可以减少我在此代码中使用的构造函数的数量?多个类的构造函数重载和转发

c# - 实例化对象的差异 - C# basic

c++ - mVariableName 中的 m 是什么意思?

c++ - 使用派生类重载函数