【问题标题】:InvalidOperationException while using NamedPipes on Windows XP and .Net 3.5在 Windows XP 和 .Net 3.5 上使用 NamedPipes 时出现 InvalidOperationException
【发布时间】:2019-04-12 02:48:29
【问题描述】:

我正在使用命名管道在使用 .Net 3.5 的两个进程之间进行通信。这在 Windows 7 上运行良好,但不知何故在 Windows XP 下无法运行。

我在那里得到一个 InvalidOperationException。这是我对德语消息的翻译尝试:“管道句柄尚未设置。您的 PipeStream 实现是否调用了 InitializeHandle?”

我为此创建了一个测试项目: http://www.chinery.de/dateien/NamedPipeTest.zip

在应用程序中,您可以点击“连接”并看到管道的名称。在右侧,您可以输入一条消息,如果一切顺利,该消息将通过管道发送。

正如我所说,问题只出现在我的 Windows XP 上。

有人知道吗?

【问题讨论】:

  • 我通过做一些愚蠢的事情设法得到了这个异常:我试图在调用 NamedPipeClientStream.Connect() 之前指定 NamedPipeClientStream.ReadMode。

标签: c# .net named-pipes


【解决方案1】:

我最近自己遇到了这个问题。我的解决方案是设置NamedPipeClientStream.ReadMode after 调用NamedPipeClientStream.Connect()。否则我会得到上面提到的Pipe handle has not been set. Did your PipeStream implementation call InitializeHandle? 异常。

【讨论】:

    【解决方案2】:

    我终于自己找到了解决方案。这是管道客户端的创建:

    NamedPipeClientStream pipeClient = new NamedPipeClientStream("localhost", PipeName, PipeDirection.InOut)
    

    我不得不将其更改为: NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", PipeName, PipeDirection.InOut)

    (将服务器名称从“localhost”更改为“.”)

    这以某种方式在 Windows 7 上有效,但在 XP 上无效。现在它终于可以在两个系统上运行了。

    【讨论】:

    • 所以我正在尝试解决一个类似的问题,在 Win 7 上使用 c# 客户端和 C++ 服务器,我必须使用"localhost"。如果我使用".",则创建NamedPipeClientStream 会抛出。太奇怪了!
    【解决方案3】:

    可能存在权限问题:因此,需要提供所需的访问权限。

    PipeSecurity _pipeSecurity = new PipeSecurity();
    PipeAccessRule psEveryone = new PipeAccessRule("Everyone", PipeAccessRights.FullControl,
        System.Security.AccessControl.AccessControlType.Allow);
    
    _pipeSecurity.AddAccessRule(psEveryone);
    
    NamedPipeServerStream pipeServer = new NamedPipeServerStream(PipeName, PipeDirection.In,
        1, PipeTransmissionMode.Message, PipeOptions.Asynchronous, 4, 4, _pipeSecurity);
    

    要克服只听一次的问题,请按照以下步骤操作: 右键单击相应的服务>属性>登录>登录为:本地系统帐户并勾选允许服务与桌面交互。 或者转到 ServiceProcessInstaller 属性并将帐户设置为 LocalSystem。

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      相关资源
      最近更新 更多