我有连接到 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 服务启动的另一个应用程序启动的。