Доступ запрещен при использовании AnonymousPipeStreams в одном процессе - PullRequest
1 голос
/ 16 сентября 2010

Мне нужен анонимный канал внутри одного и того же процесса, чтобы обеспечить потоковую асинхронную связь между двумя библиотеками.

Все работает, пока я не вызову Stream.Read () - я получаю исключение UnauthorizedAccessException - Доступ к пути запрещен. Есть идеи?

using (var pipeServer = new AnonymousPipeServerStream(PipeDirection.Out))
using (var pipeClient = new AnonymousPipeClientStream(PipeDirection.In, pipeServer.SafePipeHandle))
{
    // External lib should close server pipe when it's done
    archFile.ExtractionFinished += (sender, args) => pipeServer.Close();
    archFile.BeginExtractFile(archFileName, pipeServer);

    var buf = new byte[1000];

    int read;
    while ((read = pipeClient.Read(buf, 0, buf.Length)) > 0)
    { ... }
}

Ответы [ 2 ]

1 голос
/ 17 сентября 2010

Вам нужно использовать конструктор клиента, который принимает дескриптор канала как строку, а не SafeHandle. e.g.:

using (var pipeServer = new AnonymousPipeServerStream(PipeDirection.Out))
using (var pipeClient = new AnonymousPipeClientStream(PipeDirection.In, pipeServer.GetClientHandleAsString()))
{
    //...
}

Это задокументировано в разделе «Замечания» на http://msdn.microsoft.com/en-us/library/system.io.pipes.anonymouspipeclientstream.aspx.

0 голосов
/ 12 июля 2012

Даже 'pipeServer.ClientSafePipeHandle' также работает в фрагменте кода с учетом ответа Николь

...