Wie kann ich eine Liste aller offenen Named Pipes in Windows erhalten?

85

Gibt es eine einfache Möglichkeit zu testen, ob Ihre Named Pipe ordnungsgemäß funktioniert? Ich möchte sicherstellen, dass die Daten, die ich von meiner App sende, tatsächlich gesendet werden. Gibt es eine schnelle und einfache Möglichkeit, eine Liste aller genannten Pipes zu erhalten?

Doug T.
quelle

Antworten:

93

Sie können diese mit Process Explorer von sysinternals aus anzeigen. Verwenden Sie die Option "Suchen -> Handle oder DLL suchen ..." und geben Sie das Muster "\ Device \ NamedPipe \" ein. Es zeigt Ihnen, welche Prozesse welche Rohre offen haben.

Rob Walker
quelle
Überprüfen Sie, welche Version von Process Explorer Sie haben, bevor Sie dies versuchen. Es funktioniert nicht unter Version 15.23, sondern unter Version 16.02. (habe andere Versionen nicht ausprobiert)
Carl
2
Um mögliche Ausnahmen zu vermeiden - wie in anderen Antworten erwähnt -, können Sie meine Lösung verwenden, die niedriger ist, aber wie ein Zauber wirkt, selbst wenn der Name der benannten Pipe ungültige Zeichen in Bezug auf den Dateinamen enthält. Bitte sehen Sie stackoverflow.com/questions/25109491/…
user2126375
2
Die Verwendung pipelist.exevon SysInternals ist noch einfacher, jedoch nur über die Befehlszeile.
Chris Charabaruk
77

Geben Sie in die Windows Powershell-Konsole ein

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

Wenn Ihre Betriebssystemversion größer als Windows 7 ist, können Sie auch eingeben
get-childitem \\.\pipe\

Dies gibt eine Liste von Objekten zurück. Wenn Sie nur den Namen wollen:

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

Dies funktioniert in Powershell 6, jedoch nicht in Powershell 7

Andrew Shepherd
quelle
3
Vielleicht möchten Sie Powershell als Administrator
öffnen
2
Sie können auch get-childitem \\. \ Pipe \
Chris Gillum
@ ChrisGillum Ich habe das versucht und bekam die Fehlermeldung "Pfad '\\. \ Pipe \' kann nicht gefunden werden, weil er nicht existiert"
Andrew Shepherd
1
@ AndrewShepherd Interessant. Auf welchem ​​Betriebssystem laufen Sie? Es funktioniert für mich unter Windows Server 2012 und Windows 10 (PowerShell v3 bzw. v5).
Chris Gillum
1
@ ChrisGillum Aber ich habe es gerade auf meinem Windows Surface RT-Gerät versucht. Es funktioniert dort. (Powershell v4). Ich werde Ihren Kommentar in die Antwort aufnehmen.
Andrew Shepherd
57

Versuchen Sie stattdessen Folgendes:

String[] listOfPipes = System.IO.Directory.GetFiles(@"\\.\pipe\");
Vincent Lidou
quelle
6
Ihnen fehlt ein Schrägstrich. string [] listOfPipes = System.IO.Directory.GetFiles (@ "\\. \ pipe \");
Dmex
Ich habe die ganze Nacht nach einer Funktion gesucht, um nach Rohren zu suchen oder diese aufzulisten. Genau das brauchte ich. Vielen Dank!!
Swax
Was ist dieser besondere Weg? \\. \ scheint für den unformatierten Zugriff auf ein Laufwerk verwendet zu werden, aber woher kommt pipees?
Kevin Doyon
2
@ Kevin "\\. \" Bedeutet "diese Maschine" gemäß msdn.microsoft.com/en-US/en-en/library/windows/desktop/…
Eugene
5
Wir hatten Probleme mit dieser Methode unter Windows 10 - Fehler "Zweites Pfadfragment darf kein Laufwerk oder UNC-Name sein. Parametername: Pfad2"
Dai Bok
43

Verwenden Sie pipelist.exe von Sysinternals.

Jay
quelle
1
Siehe auch handle.exe von sysinternals, die fast alle Dinge zeigen, die ein offenes Handle haben.
JimR
19

Ich bin auf eine Funktion in Chrome gestoßen, die alle offenen Named Pipes auflistet, indem ich zu "file: //.//pipe//" navigiere.

Da ich anscheinend keinen Hinweis darauf finde und es für mich sehr hilfreich war, dachte ich, ich könnte es teilen.

Tagneu
quelle
Können Sie uns etwas mehr erklären?
Dieter Meemken
Dies listet meine Pfeifen auf. Tolle! (Beachten Sie, dass dies funktioniert, weil es wie ein Verzeichnis funktioniert, wie die Antwort von Andrew Shepherd zeigt)
Martín Coll
Ich denke, dies ist für das Debuggen / Diagnostizieren gedacht, da ich festgestellt habe, dass Chrome viele Named Pipes verwendet - ich habe 125 "Chrome" -Pipes gefunden, auch wenn Chrome nicht läuft!
Cocowalla
16

C #:

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

Die zweite Pipe wurde von dieser Website beim Senden interpretiert ... Sie benötigen am Anfang zwei Backslashes. Stellen Sie daher sicher, dass Sie System.IO.Directory.GetFiles (@ "\\. \ Pipe \") verwenden.

Beachten Sie, dass ich gesehen habe, wie dieser Funktionsaufruf 'unzulässige Zeichen in den Pfad' geworfen hat. Ausnahme, wenn eine der Pipes auf meinem Computer ungültige Zeichen hatte. PipleList.exe funktionierte jedoch einwandfrei, so dass es wie ein Fehler im .net-Code von MS aussieht.

Vincent Lidou
quelle
1
Der Hinweis zu "unzulässigen Zeichen im Pfad" ist ein wichtiger Punkt, da Programme häufig Pipe-Namen öffnen, die dies auslösen. Jedes Programm, das eine Pipe mit dem Namen like öffnet C:\myLocation\someFile.x, verursacht diesen Fehler.
dss539
6

Bei CMDAufforderung:

>ver

Microsoft Windows [Version 10.0.18362.476]

>dir \\.\pipe\\
Constantin Konstantinidis
quelle
Funktioniert auf W10, aber nicht auf W7
Tasse