Сервер именованных каналов генерирует исключение UnauthorizedAccessException при создании второго экземпляра, если PipeSecurity установлено

Вы можете просто зациклить ключи вашего шаблона и установить значение с помощью объекта данных с тем же ключом.

const data = {
    a: 'test',
    b: 'test',
    c: 'test'
}

const template = {
    a: '',
    b: ''
}

Object.keys(template).forEach((key) => template[key] = data[key])

console.log(template)

21
задан rachana gandhi 28 November 2019 в 07:13
поделиться

2 ответа

Для меня сторона сервера работает как пользователь Администратора, и сторона клиента работает как обычный пользователь. Таким образом, решение состоит в том, чтобы просто вновь открыть их использующий те же идентификационные данные.

0
ответ дан 29 November 2019 в 06:54
поделиться

Я понял это.

static void Main()
{
    PipeSecurity ps = new PipeSecurity();
    ps.AddAccessRule(new PipeAccessRule("Users", PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance, AccessControlType.Allow));
    ps.AddAccessRule(new PipeAccessRule("CREATOR OWNER", PipeAccessRights.FullControl, AccessControlType.Allow));
    ps.AddAccessRule(new PipeAccessRule("SYSTEM", PipeAccessRights.FullControl, AccessControlType.Allow));
    ps.AddAccessRule(pa);
    using (NamedPipeServerStream pipeServer =
        new NamedPipeServerStream("testpipe",PipeDirection.InOut,10, 
                                    PipeTransmissionMode.Message, PipeOptions.WriteThrough, 1024,1024,ps))
    using (NamedPipeServerStream pipeServer2 =
        new NamedPipeServerStream("testpipe", PipeDirection.InOut, 10,
                                    PipeTransmissionMode.Message, PipeOptions.WriteThrough,1024,1024,ps))
    {

Добавив права PipeAccessRights.CreateNewInstance, теперь все работает нормально.


Я столкнулся с еще одной проблемой, но я решил ее, но хотел опубликовать ее на случай, если другие люди найдут это через Google. Предоставление собственного объекта безопасности Pipe удаляет объект по умолчанию, поэтому, если он вам нужен, вам нужно заново добавить группу System, чтобы она могла общаться с Pipe, если вы пишете службу. Я обновил свой вышеприведенный код, чтобы получить службу с повышенным уровнем безопасности и приложение winforms без повышенного уровня безопасности для общения друг с другом (владелец Creator, вероятно, не нужен)

.
16
ответ дан 29 November 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: