¿Cómo puedo obtener una lista de todas las canalizaciones con nombre abiertas en Windows?

86

¿Existe una manera fácil de probar si su canalización con nombre funciona correctamente? Quiero asegurarme de que los datos que envío desde mi aplicación se envíen realmente. ¿Existe una forma rápida y sencilla de obtener una lista de todas las canalizaciones con nombre?

Doug T.
fuente

Respuestas:

95

Puede verlos con Process Explorer desde sysinternals. Use la opción "Buscar -> Buscar identificador o DLL ..." e ingrese el patrón "\ Dispositivo \ NamedPipe \". Le mostrará qué procesos tienen qué tuberías abiertas.

Rob Walker
fuente
Compruebe qué versión de Process Explorer tiene antes de intentar esto. No funciona en v15.23, pero funciona en v16.02. (no he probado otras versiones)
Carl
2
Para evitar posibles excepciones, como se menciona en otras respuestas, puede usar mi solución, que es de un nivel más bajo pero que funciona como un encanto, incluso si el nombre de la tubería con nombre contiene caracteres no válidos en el nombre del archivo. Consulte stackoverflow.com/questions/25109491/…
user2126375
2
Usar pipelist.exedesde SysInternals es aún más simple, pero es solo desde la línea de comandos.
Chris Charabaruk
79

En la consola de Windows Powershell, escriba

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

Si la versión de su sistema operativo es superior a Windows 7, también puede escribir
get-childitem \\.\pipe\

Esto devuelve una lista de objetos. Si solo quiere el nombre:

(get-childitem \\.\pipe\).FullName
Andrew Shepherd
fuente
3
Es posible que desee considerar la posibilidad de abrir Powershell como administrador
dotNetE
2
También puede usar get-childitem \\. \ Pipe \
Chris Gillum
@ChrisGillum Intenté eso y obtuve el error "No se puede encontrar la ruta '\\. \ Pipe \' porque no existe"
Andrew Shepherd
1
@AndrewShepherd Interesante. ¿En qué sistema operativo estás ejecutando? Me funciona en Windows Server 2012 y Windows 10 (PowerShell v3 y v5 respectivamente).
Chris Gillum
1
@ChrisGillum Pero lo acabo de probar en mi dispositivo Windows Surface RT. Funciona ahí. (Powershell v4). Incorporaré tu comentario en la respuesta.
Andrew Shepherd
57

En su lugar, intente lo siguiente:

String[] listOfPipes = System.IO.Directory.GetFiles(@"\\.\pipe\");
Vincent Lidou
fuente
6
te falta una barra. string [] listOfPipes = System.IO.Directory.GetFiles (@ "\\. \ pipe \");
Dmex
Pasé toda la noche buscando una función para buscar o enumerar tuberías. Esto es exactamente lo que necesitaba. ¡¡Gracias!!
swax
¿Qué es este camino especial? \\. \ parece utilizarse para el acceso sin formato a una unidad, pero ¿de dónde pipeviene?
Kevin Doyon
2
@Kevin "\\. \" Significa "esta máquina" según msdn.microsoft.com/en-US/en-en/library/windows/desktop/…
Eugene Ryabtsev
5
Hemos tenido problemas con este método que funciona en Windows 10: aparece el error "El segundo fragmento de ruta no debe ser un nombre de unidad o UNC. Nombre de parámetro: ruta2"
Dai Bok
44

Utilice pipelist.exe de Sysinternals.

Arrendajo
fuente
1
Consulte también handle.exe de sysinternals, que mostrará casi todas las cosas que tienen un identificador abierto.
JimR
19

Me encontré con una función en Chrome que enumerará todas las canalizaciones con nombre abiertas navegando a "file: //.//pipe//"

Como parece que no puedo encontrar ninguna referencia a esto y ha sido muy útil para mí, pensé que podría compartirlo.

Día nuevo
fuente
¿Puedes explicar un poco más?
Dieter Meemken
Esto enumera mis pipas. ¡Asombroso! (tenga en cuenta que esto funcionará porque funciona como un directorio, como muestra la respuesta de Andrew Shepherd)
Martín Coll
Supongo que esto es para depuración / diagnóstico, ya que noté que Chrome usa muchos canales con nombre - ¡encontré 125 tubos "cromados" incluso cuando Chrome no se está ejecutando!
Cocowalla
16

C#:

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

En CMDbreve:

>ver

Microsoft Windows [Version 10.0.18362.476]

>dir \\.\pipe\\
Constantin Konstantinidis
fuente
Funciona en W10 pero no en W7
copa
7

La segunda tubería fue interpretada por este sitio web cuando se envió ... Necesita dos barras invertidas al principio. Así que asegúrese de usar System.IO.Directory.GetFiles (@ "\\. \ Pipe \").

Tenga en cuenta que he visto que esta llamada de función arroja 'caracteres ilegales en la ruta'. excepción cuando una de las tuberías de mi máquina tenía caracteres no válidos. Sin embargo, PipleList.exe funcionó bien, por lo que parece un error en el código .net de MS.

Vincent Lidou
fuente
1
La nota sobre 'caracteres ilegales en la ruta' es un punto importante, porque es muy común que los programas abran nombres de canalizaciones que desencadenan esto. Cualquier programa que abra una tubería denominada como C:\myLocation\someFile.xprovocará este error.
dss539