c# - NamedPipeClientStream 无法访问 session 0 下的 NamedPipeServerStream

标签 c# windows-7 named-pipes

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

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

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

"Access to the path is denied"

问题是什么?如何避免?

抱歉,我无法告诉您有关异常的更多信息。只有我有这条消息在日志中。我不能从零 session 调试我的程序,对吗?

服务器流代码:

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

最佳答案

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

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);

谢谢 microsoft communnity

关于c# - NamedPipeClientStream 无法访问 session 0 下的 NamedPipeServerStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13174660/

相关文章:

c# - 如何在WPF CheckBox ListBox中获取选中的项目

c# - 适用于 Windows Phone 8 的 Windows Azure 通知中心无法正常工作

windows - 批处理文件以取消阻止从互联网复制的文件

java - windows 7中如何启动apache-tomcat-5.0.28运行java中的servlet程序

c - 命名管道上的 Poll() 会不断并立即返回 POLLHUP

c# - 从 Oracle DB 中选择所有表名

c# - 使用Entity Framework 4.0时如何更新不同表的相关条目?

iis - 配置 IIS 以全局访问已部署的网站(通过 WAN)[注意 : I have static IP]

c - 如何在命名管道 (mkfifo) 上执行非阻塞 fopen?

linux - 如何在程序写入/读取文件时透明地压缩/解压缩文件?