¿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?

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.


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

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\");

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.


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.


¿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



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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.