0

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

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

情况 :

  • 服务器:1 个程序在 Windows Server 2012 数据中心上作为服务运行
  • 客户端: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 会话回退 => 启用

有什么建议么 ?

4

0 回答 0