1

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

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

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

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

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

有人对此有任何线索吗?

4

3 回答 3

3

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

于 2019-04-11T18:48:29.363 回答
1

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

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

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

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

这在某种程度上适用于 Windows 7,但不适用于 XP。现在它终于可以在两个系统上运行了。

于 2013-02-07T14:07:06.173 回答
0

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

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。

于 2016-03-01T11:36:40.720 回答