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

use*_*700 16 windows windows-domain pipe

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

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

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

use*_*700 13

需要 1.5 天才能弄清楚每个案例。这里是文档。

症状

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

原因/背景

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

Windows 名称管道不工作可能有不同的原因。为了验证管道是问题的原因,可以使用工具 MAKEPIPE 和 READPIPE。这篇知识库文章描述了测试过程:http : //support.microsoft.com/kb/68941 Sysinternals 工具进程资源管理器对于查找当前打开的管道也很有用。使用“Find -> Find Handle or 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,然后再允许文件和打印机共享服务。

  • 原因 1) 管道防火墙只影响对命名管道的远程访问。但是请注意,即使 machinename 是本地计算机,使用 \\machinename\pipename 连接到命名管道也可能算作远程访问。 (3认同)
  • 原因 2) 同样,只有远程访问命名管道才需要文件和打印机共享。同样,出于此目的,\\machinename\pipename 可能算作远程访问。 (3认同)