Jak uzyskać listę wszystkich otwartych nazwanych potoków w systemie Windows?


86

Czy istnieje łatwy sposób sprawdzenia, czy nazwany potok działa poprawnie? Chcę się upewnić, że dane, które wysyłam z mojej aplikacji, są rzeczywiście wysyłane. Czy istnieje szybki i łatwy sposób uzyskania listy wszystkich nazwanych potoków?

Odpowiedzi:


95

Możesz je wyświetlić za pomocą Process Explorer z sysinternals. Użyj opcji „Znajdź -> Znajdź uchwyt lub bibliotekę DLL ...” i wprowadź wzorzec „\ Urządzenie \ NamedPipe \”. Pokaże ci, które procesy mają otwarte rury.


Sprawdź, którą wersję Process Explorer masz, zanim spróbujesz. Nie działa w wersji 15.23, ale działa w wersji 16.02. (nie próbowałem innych wersji)
Carl

2
Aby uniknąć możliwych wyjątków - jak jest wspomniane w innych odpowiedziach - możesz użyć mojego rozwiązania, które jest niższego poziomu, ale działa jak urok, nawet jeśli nazwa potoku nazwanego zawiera nieprawidłowe znaki w nazwie pliku. Zobacz stackoverflow.com/questions/25109491/ ...
user2126375

2
Korzystanie pipelist.exez SysInternals jest jeszcze prostsze, ale jest to tylko wiersz poleceń.
Chris Charabaruk

79

W konsoli programu Windows Powershell wpisz

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

Jeśli Twoja wersja systemu operacyjnego jest nowsza niż Windows 7, możesz również wpisać
get-childitem \\.\pipe\

Zwraca listę obiektów. Jeśli chcesz tylko nazwę:

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

3
Możesz rozważyć otwarcie Powershell jako administrator
dotNetE

2
Możesz również użyć get-childitem \\. \ Pipe \
Chris Gillum

@ChrisGillum Próbowałem tego i otrzymałem błąd „Nie można znaleźć ścieżki '\\. \ Pipe \', ponieważ nie istnieje”
Andrew Shepherd

1
@AndrewShepherd ciekawe. Na jakim systemie operacyjnym używasz? U mnie działa na Windows Server 2012 i Windows 10 (odpowiednio PowerShell v3 i v5).
Chris Gillum,

1
@ChrisGillum Ale właśnie wypróbowałem to na moim urządzeniu z systemem Windows Surface RT. Tam działa. (Powershell v4). Uwzględnię Twój komentarz w odpowiedzi.
Andrew Shepherd

57

Zamiast tego spróbuj wykonać następujące czynności:

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

6
brakuje ci ukośnika. string [] listOfPipes = System.IO.Directory.GetFiles (@ "\\. \ pipe \");
dmex

Spędziłem całą noc na poszukiwaniu funkcji do wyszukiwania lub wyświetlania listy rur. Właśnie tego potrzebowałem. Dzięki!!
wosk

Jaka jest ta specjalna ścieżka? \\. \ wydaje się być używany do surowego dostępu do dysku, ale skąd pipepochodzi?
Kevin Doyon

2
@Kevin „\\. \” Oznacza „ten komputer”, zgodnie z msdn.microsoft.com/en-US/en-en/library/windows/desktop/…
Eugene Ryabtsev

5
Mieliśmy problemy z tą metodą działającą w systemie Windows 10 - otrzymujemy błąd „Drugi fragment ścieżki nie może być nazwą dysku ani UNC. Nazwa parametru: ścieżka2”
Dai Bok


19

W Chrome natknąłem się na funkcję, która wyświetla listę wszystkich otwartych nazwanych potoków, przechodząc do „file: //.//pipe//”

Ponieważ nie mogę znaleźć żadnego odniesienia do tego i było to dla mnie bardzo pomocne, pomyślałem, że mogę się podzielić.


Czy możesz wyjaśnić trochę więcej?
Dieter Meemken

To zawiera listę moich rur. Niesamowity! (uwaga, to zadziała, ponieważ działa jak katalog, jak pokazuje odpowiedź Andrew Shepherda)
Martín Coll,

Wydaje mi się, że to jest do debugowania / diagnostyki, ponieważ zauważyłem, że Chrome używa wielu nazwanych potoków - znalazłem 125 "chromowanych" potoków, nawet gdy Chrome nie działa!
Cocowalla



7

Drugi potok został zinterpretowany przez tę witrynę internetową po przesłaniu ... Na początku potrzebne są dwa ukośniki odwrotne. Dlatego upewnij się, że używasz System.IO.Directory.GetFiles (@ "\\. \ Pipe \").

Zauważ, że widziałem, jak to wywołanie funkcji rzucało „niedozwolone znaki w ścieżce”. wyjątek, gdy jeden z potoków na moim komputerze zawierał nieprawidłowe znaki. PipleList.exe działał jednak dobrze, więc wygląda na to, że jest to błąd w kodzie .net MS.


1
Uwaga dotycząca „niedozwolonych znaków w ścieżce” jest ważnym punktem, ponieważ programy często otwierają nazwy potoków, które to powodują. Każdy program, który otwiera potok o nazwie jakC:\myLocation\someFile.x , spowoduje ten błąd.
dss539
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.