C#程序通过命名管道作为两台主机之间的服务进行通信

时间:2017-06-28 08:38:56

标签: c# service named-pipes windows2012 local-system-account

2个C#程序如何通过命名管道相互通信。

如果我在具有提升权限的管理员帐户下运行程序,一切正常 我需要使用帐户“本地系统”将此程序作为服务运行,但之后我无法访问网络。

情况:

  • 服务器:1个程序作为Windows Server 2012 Datacenter上的服务运行
  • 客户端:1个程序在Windows 7,8.1或10
  • 客户端上作为服务运行

在服务器上

  • 我将命名管道的名称放在HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters [NullSessionPipes]中   重启服务LanmanServer

在服务器程序中,我按照以下方式创建管道

PipeSecurity psobj = new PipeSecurity();
psobj.AddAccessRule(new PipeAccessRule("EveryOne", PipeAccessRights.FullControl, AccessControlType.Allow));
NamedPipeServerStream requestpipe = new NamedPipeServerStream(REQUESTPIPENAME, PipeDirection.InOut, numThreads, PipeTransmissionMode.Byte, 
                            PipeOptions.Asynchronous, 2048, 2048, psobj);

在客户端程序中,我按如下方式连接到命名管道:

NamedPipeClientStream pipeClient = new NamedPipeClientStream(SERVER, REQUESTPIPENAME, PipeDirection.InOut, PipeOptions.WriteThrough)

我还模拟了2台Windows 7计算机之间的情况(1个物理计算机和1个虚拟计算机,而不是桥接计算机)。我在这里尝试了一些选项:

  • 网络访问:限制对命名管道和共享的匿名访问=>停用
  • 网络访问:允许LocalSystem NULL会话回退=>启用

有什么建议吗?

0 个答案:

没有答案