17

我有连接到 NamedPipeServerStream 的 NamedPipeClientStream。他们交换了几条消息,然后 NamedPipeClientStream 关​​闭,而 NamedPipeServerStream 重新创建并继续侦听客户端管道。(我无法制作一个有效的异步服务器管道,所以这是某种狗钉)

在我的客户端从普通用户会话启动的流期间,客户端-服务器交互工作正常。

但是有一种情况是客户端管道从 Win7 和 win2008 服务器上的会话 0 启动。发生这种情况时,我在客户端流中出现错误:

“访问路径被拒绝”

问题是什么?如何避免?

抱歉,我无法告诉您有关异常的更多信息。只有我有这个消息在日志中。而且我不能从零会话调试我的程序,可以吗?

服务器流代码:

PipeSecurity ps = new PipeSecurity();
System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.BuiltinUsersSid, null);
PipeAccessRule par = new PipeAccessRule(sid, PipeAccessRights.ReadWrite, System.Security.AccessControl.AccessControlType.Allow);
ps.AddAccessRule(par);
pipeClientConnection = new NamedPipeServerStream(General.PIPENAME, PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, General.BUFFERSIZE, General.BUFFERSIZE, ps);
Console.Write("Waiting for client connection...");
IAsyncResult result = pipeClientConnection.BeginWaitForConnection(OnPipeConnected, pipeClientConnection);

也许安全设置有问题?

和客户端代码:

using (NamedPipeClientStream pipeStream = new NamedPipeClientStream(".", General.PIPENAME, PipeDirection.InOut))
{
    try
    {
        Console.WriteLine("Connecting with pipe...");
        pipeStream.Connect(General.CONNECTIONTIMEOUT);
        Console.WriteLine("Pipe connection established");
        //..do something..
    }
    //...
}

服务器在 LocalSystem 下作为 windows 服务启动。客户端 - 是一个简单的控制台应用程序。它是由从 LocalSystem 服务启动的另一个应用程序启动的。

4

2 回答 2

18

看起来问题出在此处的安全设置中:

System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.BuiltinUsersSid, null);

应该 :

System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.WorldSid, null);

感谢微软社区

于 2012-11-01T13:22:01.383 回答
1

我知道这个问题有点老了,我刚刚遇到了这个问题,并想补充一下。

此错误还可能表明命名管道已在使用中。我有一个生产服务运行我试图调试的相同可执行文件,并且在初始化该管道服务器时它失败了,因为它已经被另一个进程使用。似乎该错误应该对这种情况提供更多信息,但事实就是如此。

于 2019-03-29T15:47:23.160 回答