如何获取Windows中所有打开的命名管道的列表?


86

有没有一种简单的方法可以测试命名管道是否正常工作?我想确保我从我的应用程序发送的数据确实已发送。有没有一种快速简便的方法来获取所有命名管道的列表?

Answers:


95

您可以从sysinternals使用Process Explorer查看这些内容。使用“查找->查找句柄或DLL ...”选项,并输入模式“ \ Device \ NamedPipe \”。它将向您显示哪些进程打开了哪些管道。


在尝试此操作之前,请检查您具有哪个版本的Process Explorer。它不适用于v15.23,但适用于v16.02。(尚未尝试其他版本)
卡尔

2
为了避免可能的例外(如在其他答案中提到的那样),您可以使用我的解决方案,该解决方案的级别较低,但是即使命名管道的名称包含无效的字符(即使文件名),也可以像超级按钮一样工作。请参阅stackoverflow.com/questions/25109491/...
user2126375

2
pipelist.exe从SysInternals使用甚至更简单,但这仅是命令行。
克里斯·查拉巴鲁克

79

在Windows Powershell控制台中,键入

[System.IO.Directory]::GetFiles("\\.\\pipe\\")

如果您的操作系统版本大于Windows 7,则还可以输入
get-childitem \\.\pipe\

这将返回对象列表。如果只需要名称:

(get-childitem \\.\pipe\).FullName

3
您可能需要考虑以管理员
身份

2
您还可以使用get-childitem \\。\ pipe \
克里斯·吉伦

@ChrisGillum我尝试了此操作,并收到错误消息“因为它不存在,无法找到路径'\\。\ pipe \'”
Andrew Shepherd 2015年

1
@AndrewShepherd有趣。您正在运行什么操作系统?它适用于Windows Server 2012和Windows 10(分别为PowerShell v3和v5)。
克里斯·吉伦

1
@ChrisGillum但是我只是在Windows Surface RT设备上尝试过。它在那里工作。(Powershell v4)。我会将您的评论纳入答案。
Andrew Shepherd

57

请尝试以下操作:

String[] listOfPipes = System.IO.Directory.GetFiles(@"\\.\pipe\");

6
您缺少斜线。string [] listOfPipes = System.IO.Directory.GetFiles(@“ \\。\ pipe \”);
dmex

我整夜都在寻找功能来搜索或列出管道。这正是我所需要的。谢谢!!
swax 2012年

这条特殊的路是什么?\\。\似乎用于对驱动器的原始访问,但是它pipe来自哪里?
凯文·多永


5
我们在Windows 10上使用此方法遇到了问题-出现错误“第二个路径片段不能是驱动器或UNC名称。参数名称:path2”
Dai Bok


19

我偶然发现了Chrome中的一项功能,该功能会通过导航到“ file://.///pipe//”列出所有打开的命名管道

由于我似乎找不到对此的任何参考,并且对我很有帮助,所以我想我可以分享一下。


你能解释更多吗?
Dieter Meemken

这确实列出了我的管道。惊人!(注意这将工作,因为它就像一个目录,安德鲁谢泼德的答案节目)
马丁·科尔

我猜这是出于调试/诊断的目的,因为我注意到Chrome使用了很多命名管道-即使Chrome不在运行,我也发现了125个“ chrome”管道!
Cocowalla



7

提交时,该网站解释了第二个管道...在开始时需要两个反斜杠。因此,请确保使用System.IO.Directory.GetFiles(@“ \\。\ pipe \”)。

请注意,我已经看到此函数调用在路径中抛出“非法字符”。当机器上的管道之一包含无效字符时发生异常。尽管PipleList.exe可以正常运行,所以它似乎像MS的.net代码中的错误。


1
关于“路径中的非法字符”的注释很重要,因为程序打开触发它的管道名称非常普遍。任何打开名为like的管道的程序C:\myLocation\someFile.x都将导致此错误。
dss539 2013年
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.