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

是否有一种简单的方法来测试您的命名管道是否正常工作?我想确保我从应用程序发送的数据真的被发送了。有没有一种快速简单的方法来获得所有命名管道的列表?

138874 次浏览

You can view these with Process Explorer from sysinternals. Use the "Find -> Find Handle or DLL..." option and enter the pattern "\Device\NamedPipe\". It will show you which processes have which pipes open.

Use pipelist.exe from Sysinternals.

C#:

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

Try the following instead:

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

The second pipe was interpreted by this web site when submitted... You need two backslashes at the beginning. So make sure to use System.IO.Directory.GetFiles(@"\\.\pipe\").

Note that I have seen this function call throw an 'illegal characters in path.' exception when one of the pipes on my machine had invalid characters. PipleList.exe worked ok though, so it seems like a bug in MS's .NET code.

In the Windows Powershell console, type

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

If your OS version is greater than Windows 7, you can also type
get-childitem \\.\pipe\

This returns a list of objects. If you want the name only:

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

In Powershell 7, the second example \\.\pipe\ does not work (see this known bug), so you will have to stick to the first syntax.

I stumbled across a feature in Chrome that will list out all open named pipes by navigating to "file://.//pipe//"

Since I can't seem to find any reference to this and it has been very helpful to me, I thought I might share.

At CMD prompt:

>ver


Microsoft Windows [Version 10.0.18362.476]


>dir \\.\pipe\\