NamedPipeClientStream não pode acessar a NamedPipeServerStream na sessão 0
Eu tenho NamedPipeClientStream que se conecta a NamedPipeServerStream. Eles trocam algumas mensagens e, em seguida, o fechamento de NamedPipeClientStream, enquanto NamedPipeServerStream é recriado e continua ouvindo os canais do cliente. (Eu não consegui fazer um Server Pipe assíncrono, então isso é uma espécie de dog-nail)
A interação cliente-servidor funciona bem durante os fluxos do meu cliente iniciados a partir de sessões normais do usuário.
Mas há uma situação em que o pipe do cliente é iniciado a partir da sessão 0 no servidor Win7 e win2008. Quando isso acontece, eu tive um erro no fluxo do cliente:
"Acesso ao caminho é negado"
Qual é o problema? Como evitar isso?
Desculpe eu não posso te dizer mais informações sobre exceção. Só tenho essa mensagem no log. E eu não posso depurar meu programa da sessão zero, posso?
O código do fluxo do servidor:
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);
Talvez algo esteja errado com as configurações de segurança?
E o código do cliente:
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..
}
//...
}
O servidor é iniciado como serviço do windows em LocalSystem. O cliente - é um aplicativo de console simples. É lançado por outro aplicativo lançado do serviço LocalSystem.