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.
Link è rotto. Odio che Microsoft continui a riorganizzare i loro siti Web e a lasciare milioni di link non funzionanti su Internet. – RenniePet