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?

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.


Ü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


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

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.


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.


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


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.