Программы на C#, взаимодействующие по именованным каналам как сервис между двумя хостами

Как 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)

Я также смоделировал ситуацию между двумя машинами Windows 7 (1 физическая и 1 виртуальная, без мостов). Здесь я попробовал несколько вариантов:

  • Доступ к сети: ограничить анонимный доступ к именованным каналам и общим ресурсам => отключен
  • Доступ к сети: разрешить откат сеанса LocalSystem NULL => включен

Какие-либо предложения?

0 ответов

Другие вопросы по тегам