2012-11-01 12 views
9

Mam NamedPipeClientStream, który łączy się z NamedPipeServerStream. Wymieniają kilka komunikatów, a następnie zamykają NamedPipeClientStream, a NamedPipeServerStream ponownie tworzy i kontynuuje nasłuchiwanie dla potoków klienta. (Nie mogłem wykonać asynchronicznej instalacji Server Pipe, więc jest to rodzaj psiego gwoździa)NamedPipeClientStream nie może uzyskać dostępu do NamedPipeServerStream w sesji 0

Interakcja klient-serwer działa poprawnie podczas strumieni moich klientów uruchamianych z normalnych sesji użytkownika.

Istnieje jednak sytuacja, gdy rura klienta jest uruchamiana z sesji 0 na serwerze Win7 i win2008. Kiedy to nastąpi miałem błąd w strumieniu klient:

„Dostęp do drogi jest zabroniony”

Na czym polega problem? Jak tego uniknąć?

Niestety, nie mogę podać więcej informacji na temat wyjątku. Mam tylko tę wiadomość w dzienniku. I nie mogę debugować programu z sesji zerowej, prawda?

Serwer kod stream:

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 zabezpieczeń?

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 uruchomiony jako usługa systemu Windows pod LocalSystem. Klient - jest prostą aplikacją konsolową. Jest uruchamiany przez inną aplikację uruchomioną z usługi LocalSystem.

Odpowiedz

12

Wygląda na to, że problem był w ustawieniach zabezpieczeń tutaj:

System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.BuiltinUsersSid, null); 

Powinno być:

System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.WorldSid, null); 

Dzięki microsoft communnity

+9

link jest uszkodzony. Nienawidzę tego, że Microsoft stale reorganizuje swoje strony internetowe i pozostawia miliony niedziałających linków w całym Internecie. – RenniePet

Powiązane problemy