C# 在Windows XP和.Net 3.5上使用NamedPipes时出现InvalidOperationException

C# 在Windows XP和.Net 3.5上使用NamedPipes时出现InvalidOperationException,c#,.net,named-pipes,C#,.net,Named Pipes,我使用命名管道在两个进程之间使用.NET3.5进行通信。这在Windows7上可以正常工作,但在WindowsXP下却无法正常工作 我在那里得到了一个残疾手术的例外。下面是我对德语消息的翻译:“尚未设置管道句柄。您的PipeStream实现是否调用InitializeHandle?” 我已为此创建了一个测试项目: 在应用程序中,您可以点击“连接”,并将看到管道的名称。在右侧,您可以输入一条消息,如果一切顺利,该消息将通过管道发送 正如我所说,这个问题只出现在我的Windows XP上 有人对此

我使用命名管道在两个进程之间使用.NET3.5进行通信。这在Windows7上可以正常工作,但在WindowsXP下却无法正常工作

我在那里得到了一个残疾手术的例外。下面是我对德语消息的翻译:“尚未设置管道句柄。您的PipeStream实现是否调用InitializeHandle?”

我已为此创建了一个测试项目:

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

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


有人对此有线索吗?

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

NamedPipeClientStream pipeClient = new NamedPipeClientStream("localhost", PipeName, PipeDirection.InOut)
我必须将此更改为: NamedPipeClientStream pipeClient=新的NamedPipeClientStream(“.”,PipeName,PipeDirection.InOut)

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


这在Windows7上起作用,但在XP上不起作用。现在它终于可以在两个系统上运行了。

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

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。

我最近也遇到了这个问题。我的解决方案是在调用
NamedPipeClientStream.Connect()
后设置
NamedPipeClientStream.ReadMode
。否则我将得到未设置的
管道句柄。您的PiPeFieldFieldC++调用了RealAllieReals/<代码>异常吗?< /P>我通过做一些愚蠢的事情来获得这个异常:我尝试在命名NealDePiClient流.Client()之前指定NAMEDPEPIPELITENTROUN.RADMODE。所以我试图解决一个类似的问题,在Client 7上有一个C客户端和C++服务器,我必须使用
“localhost”
。如果我使用
,那么创建
NamedPipeClientStream
将抛出。真奇怪!解决了这个问题,谢谢