本地Windows命名管道失败的原因是什么?


12

我整天都在努力工作,而且我被困住了。今天早上,我们的亚洲同事打电话给我,因为我们的产品数据管理系统的SolidWorks插件无法与本地主应用程序通信。该问题会影响Windows域中的最终用户计算机。我们使用SQL Server工具箱中的READPIPE和MAKEPIPE工具来确定底层问题是Windows管道功能。

  • MAKEPIPE util创建一个管道并正在等待客户端。 READPIPE util返回:“无法打开管道。状态53”。根据 http://support.microsoft.com/kb/110905 这意味着找不到网络名称。在我的本地计算机上,管道从READPIPE到MAKEPIPE的“hello”没有问题。
  • 启用命名管道的服务器进程正在运行。
  • HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Lanmanserver \ Parameters下的设置看起来没问题。没有管道防火墙设置。
  • 这个问题影响了一些用户,但不是全部。除某些网络共享组外,我们未对域组进行更改。
  • 我以管理员身份登录,但管道无法正常工作。

任何帮助表示赞赏!谢谢。


受影响的用户是否可以连接到相关服务器上的普通文件共享?
Harry Johnston

目前股票没有问题。这不是服务器/客户端问题。这两个进程都在同一台计算机上。
user152700

当您重现问题时,以管理员身份登录到受影响的计算机,使用READPIPE和MAKEPIPE,您使用的确切命令是什么? (请编辑您的帖子以包含它们,而不是将它们放在评论中。)
Harry Johnston

感谢您的支持。这是一个很难的,我将在这里记录解决方案。
user152700

Answers:


10

每个案例都需要1.5天来计算出来。这里是文档。

症状

  • 拖放到应用程序中不起作用。
  • 进程间通信,例如主应用程序和插件之间不起作用。

原因/背景

通过Windows命名管道为某些应用程序实现进程间通信(不要与UNIX样式管道混淆)。请参阅MSDN文档: http://msdn.microsoft.com/en-us/library/aa365590.aspx

可能有不同的原因导致Windows名称管道不起作用。要验证管道是问题的原因,可以使用工具MAKEPIPE和READPIPE。这篇KB文章介绍了测试过程: http://support.microsoft.com/kb/68941 Sysinternals工具进程资源管理器也可用于查找当前打开的管道。使用“查找 - >查找句柄或DLL ...”选项并输入模式“\ Device \ NamedPipe \”。它将显示哪些进程具有哪些管道打开。 http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

疑难解答

原因1:管道防火墙阻止了应用程序

Windows可以阻止应用程序使用命名管道。此防火墙通常未启用,并通过注册表进行配置。请参阅此处的MS支持文章: http://support.microsoft.com/kb/925890 。检查管道防火墙是否未启用,或将Keytech和所有插件添加到允许的应用程序列表中。

原因2:未启用文件和打印机共享服务。

命名管道由同时控制文件和打印机共享的进程启用。使用Windows服务工具检查此进程是否正在运行。服务名称在服务列表中显示为“服务器”。服务名称为LanmanServer,EXE为C:\ Windows \ system32 \ svchost.exe -k netsvcs

原因3:Windows防火墙阻止了LanmanServer

Windows防火墙可以阻止命名管道,即使它们仅用于同一台机器上的进程间通信。特别是域和本地防火墙规则可能会导致冲突。 “允许Windows防火墙的程序”列表中的两个条目表示存在冲突。 在大多数情况下,可以使用“检查防火墙状态”窗口来解决此问题。如果此窗口显示用于设置建议的防火墙规则的选项,则通常可以使用此选项取消阻止管道。结合域防火墙规则,有时需要首先从域中取消加入PC,然后允许文件和打印机共享服务。


3
原因1)管道防火墙仅影响对命名管道的远程访问。但请注意,即使machinename是本地计算机,使用\\ machinename \ pipename连接到命名管道也可能会被视为远程访问。
Harry Johnston

3
原因2)同样,只有远程访问命名管道才需要文件和打印机共享。同样,\\ machinename \ pipename可能被视为此目的的远程访问。
Harry Johnston

原因3)即使使用\\ machinename \ pipename,Windows防火墙也不能阻止本地连接。但是,如果您在域中并且Windows防火墙严重错误配置,则可能遇到了更广泛的问题,可能与身份验证有关。
Harry Johnston

@HarryJohnston可以阻止哪种类型的身份验证?喜欢 ServiceHost.Authentication 如上所述 这里
iCantSeeSharp

如果您在域中,并且Windows防火墙阻止了对域控制器的网络访问(或出于某些其他原因),则可能无法进行身份验证。这不应该真正影响本地管道访问,而是YMMV。
Harry Johnston
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.