2013-03-07 3 views
1

Lorsque j'essaie d'accéder à un NamedPipeServer (exécuté en tant que WindowsService) à partir d'un WPF-Testapp, j'obtiens toujours une exception UnauthorizedAccessException.WindowsService et NamedPipes: UnauthorizedAccessException

Serveur:

class PipeConnector 
    { 
     private volatile bool _shouldStop; 
     NamedPipeServerStream pipeServer; 
     public PipeConnector() 
     { 
      _shouldStop = false; 
      PipeSecurity ps = new PipeSecurity(); 
      ps.AddAccessRule(new PipeAccessRule(WindowsIdentity.GetCurrent().Name, PipeAccessRights.ReadWrite, AccessControlType.Allow)); 
      pipeServer = new NamedPipeServerStream("ConnectorPipe", PipeDirection.InOut, 10, 
            PipeTransmissionMode.Message, 
            PipeOptions.WriteThrough, 4028, 4028, ps);  
     } 

     public void Start() 
     { 
      pipeServer.WaitForConnection(); 

      StreamWriter sw = new StreamWriter(pipeServer); 

      while (!_shouldStop) 
      { 
       sw.WriteLine("Here is Server, I'm working"); 
       sw.Flush(); 
       Thread.Sleep(5000); 
      } 
      this.pipeServer.Close(); 
     } 

     public void RequestStop() 
     { 
      this._shouldStop = true; 
      this.pipeServer.Close(); 
     } 
    } 

Client:

public delegate void Notification(string text); 
    class PipeConnector 
    { 

     NamedPipeClientStream pipeClient; 
     public Notification notify; 
     public PipeConnector() 
     { 
      pipeClient = 
        new NamedPipeClientStream(".", "ConnectorPipe", 
         PipeDirection.InOut); 
     } 

     public void Start() 
     { 
      pipeClient.Connect(); 
      StreamReader sr = new StreamReader(pipeClient); 

      while (true) 
      { 
       string text = sr.ReadLine(); 
       notify(text); 
      } 

     } 
    } 

J'ai trouvé des solutions beaucoup pour des problèmes similaires, mais personne ne travaille pour moi ..

J'ai aussi essayé ceci: http://support.microsoft.com/kb/126645/en-us

Merci à l'avance!

Répondre

1

Eh bien .. Je l'ai eu le travail.

La solution:

Au lieu de WindowsIdentity.GetCurrent().Name i utilisé new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null)

Questions connexes