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.