СЕРВИС
Код: Выделить всё
var ps = new PipeSecurity();
//ps.SetAccessRule(new PipeAccessRule("Everyone",
PipeAccessRights.ReadWrite, AccessControlType.Allow));
//ps.SetAccessRule(new PipeAccessRule(
// new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null),
// PipeAccessRights.ReadWrite,
// AccessControlType.Allow));
//ps.SetAccessRule(new PipeAccessRule(
// new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null),
// PipeAccessRights.ReadWrite,
// AccessControlType.Allow));
ps.SetAccessRule(new PipeAccessRule(
new SecurityIdentifier(WellKnownSidType.WorldSid, null),
PipeAccessRights.ReadWrite,
AccessControlType.Allow));
var serverPipe = new NamedPipeServerStream(NamedPipeHelper.PipeName,
PipeDirection.InOut, 1,
PipeTransmissionMode.Message);
serverPipe.SetAccessControl(ps);
await serverPipe.WaitForConnectionAsync(ct);
Код: Выделить всё
var clientPipe = new NamedPipeClientStream(".", NamedPipeHelper.PipeName,
PipeDirection.InOut);
await clientPipe.ConnectAsync(TimeSpan.FromSeconds(3), ct);
System.UnauthorizedAccessException: доступ к пути отказано
Как видите, я настроил безопасность сервера, а также попробовал несколько разных решений, но ничего не помогло.
Я также пытался запустить службу как простое приложение (с повышенными правами), но когда клиент подключается из непривилегированной учетной записи, я получаю сообщение об ошибке.
Если запустить приложение от привилегированного пользователя, соединение работает (оба со службой и сервером, работающим как простое приложение).
Несколько блогов и веб-сайтов говорят, что решение состоит в том, чтобы передать безопасность внутри ctor, но с net8 это невозможно.
Я застрял, не знаю, как решить эту проблему.
Подробнее здесь: https://stackoverflow.com/questions/785 ... sexception