本地 Windows 命名管道失败的原因有哪些?

本地 Windows 命名管道失败的原因有哪些?

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

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

任何帮助都非常感谢!谢谢。

答案1

需要 1.5 天来解决每个案例。此处提供文档。

症状

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

原因/背景

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

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

故障排除

原因 1:应用程序被 Pipes 防火墙阻止

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 从域中取消加入,然后允许文件和打印机共享服务。

相关内容