0

2 つの C# プログラムが名前付きパイプで相互に通信するにはどうすればよいですか?

昇格された権限を持つ管理者アカウントでプログラムを実行すると、すべてが機能します。
このプログラムを「Local System」アカウントでサービスとして実行する必要がありますが、ネットワークにアクセスできません。

状況 :

  • サーバー: 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