当我尝试向管道添加安全性时,出现未经授权的访问异常。我认为这需要在创建管道时定义,或者至少添加更改管道的权限,但我也不知道如何做到这一点。网上的所有例子都有太多的论点。我的编译器说 NamedPipeServerStream 的最大值为 7 并且没有任何安全选项。 微软同意我的观点。
using System.IO.Pipes;
NamedPipeServerStream pipeServer;
pipeServer = new NamedPipeServerStream("PipeName", PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
PipeSecurity clientPipeSecurity = new PipeSecurity();
//PipeAccessRule clientAccessRule = new PipeAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), PipeAccessRights.ReadWrite, AccessControlType.Allow);
//clientPipeSecurity.AddAccessRule(clientAccessRule);
PipeAccessRule clientAccessRule = new PipeAccessRule("Domain Users", PipeAccessRights.ReadWrite, AccessControlType.Allow);
clientPipeSecurity.AddAccessRule(clientAccessRule);
pipeServer.SetAccessControl(clientPipeSecurity);
是否包含了错误的库?为什么它不能像其他帖子所说的那样编译?我所能想到的是,这些示例太旧了。出于某种原因,.NET 已经放弃了该选项。
pipeServer = new NamedPipeServerStream("DAQUpdater",
PipeDirection.InOut,
1,
PipeTransmissionMode.Message,
PipeOptions.Asynchronous,
0x4000,
0x400,
pipeSecurity);
“NamedPipeServerStream”不包含带有 8 个参数的构造函数
https://stackoverflow.com/a/71370760/4500335有答案。谢谢汉斯。
在 NET 6.0 之后,您必须使用 NamedPipeServerStreamAcl 来更改创建时的安全性。
NamedPipeServerStream stream = NamedPipeServerStreamAcl.Create(
"SecurityTestPipe", PipeDirection.InOut,
NamedPipeServerStream.MaxAllowedServerInstances,
PipeTransmissionMode.Byte, PipeOptions.Asynchronous, 0, 0, pipeSecurity);