NamedPipeClientStream nie może uzyskać dostępu do NamedPipeServerStream w sesji 0

Mam NamedPipeClientStream, który łączy się z NamedPipeServerStream. Wymieniają kilka komunikatów, a następnie zamykają NamedPipeClientStream, podczas gdy NamedPipeServerStream odtworzył i kontynuuje słuchanie potoków klienta. (Nie mogłem stworzyć działającej asynchronicznej rury serwera, więc jest to jakiś psi paznokieć)

Interakcja klient-serwer działa dobrze podczas strumieni mojego klienta uruchamianych z normalnych sesji użytkownika.

Ale jest sytuacja, gdy rura klienta jest uruchamiana z sesji 0 na serwerze Win7 i win2008. W takim przypadku wystąpił błąd w strumieniu klienta:

„Dostęp do ścieżki jest zabroniony”

Jaki jest problem? Jak tego uniknąć?

Przepraszam, nie mogę ci powiedzieć więcej informacji o wyjątku. Tylko ja mam ten komunikat w dzienniku. I nie mogę debugować mojego programu od zera, prawda?

Kod strumienia serwera:

PipeSecurity ps = new PipeSecurity();
System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.BuiltinUsersSid, null);
PipeAccessRule par = new PipeAccessRule(sid, PipeAccessRights.ReadWrite, System.Security.AccessControl.AccessControlType.Allow);
ps.AddAccessRule(par);
pipeClientConnection = new NamedPipeServerStream(General.PIPENAME, PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, General.BUFFERSIZE, General.BUFFERSIZE, ps);
Console.Write("Waiting for client connection...");
IAsyncResult result = pipeClientConnection.BeginWaitForConnection(OnPipeConnected, pipeClientConnection);

Może coś jest nie tak z ustawieniami bezpieczeństwa?

I kod klienta:

using (NamedPipeClientStream pipeStream = new NamedPipeClientStream(".", General.PIPENAME, PipeDirection.InOut))
{
    try
    {
        Console.WriteLine("Connecting with pipe...");
        pipeStream.Connect(General.CONNECTIONTIMEOUT);
        Console.WriteLine("Pipe connection established");
        //..do something..
    }
    //...
}

Serwer jest uruchamiany jako usługa Windows w systemie LocalSystem. Klient - to prosta aplikacja konsoli. Jest uruchamiany przez inną aplikację uruchomioną z usługi LocalSystem.

questionAnswers(1)

yourAnswerToTheQuestion