2012-11-01 11 views
9

Ho NamedPipeClientStream che si collega a NamedPipeServerStream. Si scambiano un paio di messaggi e quindi NamedPipeClientStream si chiude, mentre NamedPipeServerStream viene ricreato e continua ad ascoltare le pipe del client. (Non riuscivo a creare un server pipe asincrono, quindi questa è una sorta di chiodo per cani)NamedPipeClientStream non può accedere a NamedPipeServerStream in sessione 0

L'interazione client-server funziona bene durante i flussi del mio client avviati da normali sessioni utente.

Ma c'è una situazione in cui il pipe del cliente viene lanciato dalla sessione 0 su server Win7 e win2008. Quando questo accade ho avuto un errore nel flusso Cliente:

"L'accesso al percorso negato"

Qual è il problema? Come evitarlo?

Spiacente, non posso dirvi ulteriori informazioni sull'eccezione. Ho solo questo messaggio nel registro. E non riesco a eseguire il debug del mio programma dalla sessione zero, posso?

Il codice flusso server:

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

Forse qualcosa non va con le impostazioni di sicurezza?

E il codice del client:

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

Il server è lanciato come servizio di Windows in LocalSystem. Il client - è una semplice applicazione di console. Viene lanciato da un'altra applicazione lanciata dal servizio LocalSystem.

risposta

12

Sembra che il problema era in impostazioni di sicurezza qui:

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

dovrebbe essere:

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

Grazie microsoft communnity

+9

Link è rotto. Odio che Microsoft continui a riorganizzare i loro siti Web e a lasciare milioni di link non funzionanti su Internet. – RenniePet

Problemi correlati