NamedPipeClientStream kann unter Sitzung 0 nicht auf NamedPipeServerStream zugreifen

Ich habe NamedPipeClientStream, der sich mit NamedPipeServerStream verbindet. Sie tauschen einige Nachrichten aus und schließen dann NamedPipeClientStream, während NamedPipeServerStream neu erstellt wird und weiterhin auf die Client-Pipes wartet. (Ich konnte keine funktionierende asynchrone Server-Pipe erstellen, das ist also eine Art Hundenagel.)

Die Client-Server-Interaktion funktioniert einwandfrei, wenn die Streams meines Clients aus normalen Benutzersitzungen gestartet werden.

Es gibt jedoch eine Situation, in der Client-Pipe von Sitzung 0 auf Win7- und Win2008-Servern gestartet wird. In diesem Fall ist ein Fehler im Client-Stream aufgetreten:

"Zugriff auf den Pfad wird verweigert"

Worin besteht das Problem? Wie vermeide ich es?

Leider kann ich Ihnen keine weiteren Informationen zu Ausnahmen geben. Nur ich habe diese Meldung im Log. Und ich kann mein Programm nicht von einer Nullsitzung aus debuggen, oder?

Der Server-Stream-Code:

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);

Vielleicht stimmt etwas mit den Sicherheitseinstellungen nicht?

Und der Client-Code:

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..
    }
    //...
}

Der Server wird als Windows-Dienst unter LocalSystem gestartet. Der Client - ist eine einfache Konsolenanwendung. Es wird von einer anderen Anwendung gestartet, die über den LocalSystem-Dienst gestartet wird.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage