相关疑难解决方法(0)

为只读命名管道启用MessageMode时的C#UnauthorizedAccessException(NamedPipeClientStream类)

NamedPipeClientStream.NET中的类存在问题,因为您无法使用该类创建此实例PipeDirection.In,然后成功更改ReadModePipeTransmissionMode.Message.

试图这样做将提高UnauthorizedAccessException.虽然管道通常用于在进程之间进行通信,但是在单个进程中的这个简单示例显示了问题:

var pipeOut = new NamedPipeServerStream("SomeNamedPipe", 
                                        PipeDirection.Out, 
                                        1, 
                                        PipeTransmissionMode.Message);
var pipeIn = new NamedPipeClientStream(".", 
                                       "SomeNamedPipe", 
                                       PipeDirection.In);
pipeIn.Connect();
pipeIn.ReadMode = PipeTransmissionMode.Message;
Run Code Online (Sandbox Code Playgroud)

UnauthorizedAccessException尝试设置ReadMode属性时,此代码将抛出一个.


在搜索有关此问题的信息时,我在其他地方找到了对它的引用,例如:

所有这些帖子都提到这是"奇怪的","奇怪的"等,但不解释"为什么"它不起作用,并且都给出相同的解决方法,"出于一些奇怪的原因"设置管道方向以InOut使得它的工作.

确实,这确实使它工作,但它需要从根本上改变管道的两端定义到全双工,而不是单向,我认为这是一个非常差的方法,除非你是能够更改客户端和服务器,这甚至可能是不可能的.


我的问题是,为什么在入站管道上启用消息模式会导致异常,是否有更好的方法来解决此问题,而不是将管道更改为双向模式?

.net c# named-pipes

13
推荐指数
1
解决办法
2919
查看次数

你能更详细地解释PIPE_READMODE_MESSAGE/PIPE_READMODE_BYTE之间的区别吗?

虽然我在这里阅读了这份文件,但它对我来说仍然没有意义:

数据作为消息流从管道中读取.仅当还指定了PIPE_TYPE_MESSAGE时,才能使用此模式.

c++ named-pipes

10
推荐指数
1
解决办法
5785
查看次数

标签 统计

named-pipes ×2

.net ×1

c# ×1

c++ ×1