Як я можу отримати список усіх відкритих іменованих каналів у Windows?


86

Чи є простий спосіб перевірити, чи правильно працює ваша названа труба? Я хочу переконатися, що дані, які я надсилаю з мого додатка, насправді надсилаються. Чи є швидкий і простий спосіб отримати список усіх названих труб?

Відповіді:


95

Ви можете переглянути їх за допомогою Process Explorer із sysinternals. Скористайтесь опцією "Знайти -> Знайти ручку або DLL ..." і введіть шаблон "\ Device \ NamedPipe \". Він покаже вам, які процеси мають відкриті труби.


Перш ніж спробувати це, перевірте, яка у вас версія Process Explorer. Він не працює на v15.23, але працює на v16.02. (не пробував інших версій)
Карл,

2
Щоб уникнути можливих винятків - як це згадується в інших відповідях - ви можете використовувати моє рішення, яке є більш низьким рівнем, але працює як шарм, навіть якщо ім'я названої труби містить недійсні символи замість імені файлу. Будь ласка , см stackoverflow.com/questions/25109491 / ...
user2126375

2
Використання pipelist.exeз SysInternals ще простіше, але це лише командний рядок.
Кріс Чарабарук,

79

В консолі Windows Powershell введіть

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

Якщо ваша версія ОС перевищує Windows 7, ви також можете ввести
get-childitem \\.\pipe\

Це повертає список об’єктів. Якщо ви хочете лише ім'я:

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

3
Можливо, ви захочете відкрити Powershell як адміністратор
dotNetE

2
Ви також можете використовувати get-childitem \\. \ Pipe \
Кріс Гіллум

@ChrisGillum Я спробував це і отримав повідомлення про помилку "Не вдається знайти шлях '\\. \ Труба \', оскільки він не існує"
Ендрю Шеперд

1
@AndrewShepherd Цікаво. На якій ОС ви працюєте? Це працює для мене на Windows Server 2012 та Windows 10 (PowerShell v3 та v5 відповідно).
Chris Gillum

1
@ChrisGillum Але я щойно спробував це на своєму пристрої Windows Surface RT. Там це працює. (Powershell v4). Я включу ваш коментар до відповіді.
Ендрю Шеперд

57

Спробуйте замість цього:

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

6
ви пропустили скісну риску. рядок [] listOfPipes = System.IO.Directory.GetFiles (@ "\\. \ pipe \");
dmex

Цілу ніч я шукав функцію пошуку або переліку труб. Це саме те, що мені потрібно було. Дякую!!
swax

Що це за особливий шлях? \\. \ схоже, використовується для необробленого доступу до диска, але звідки він береться pipe?
Кевін Дойон

2
@Kevin "\\. \" Означає "ця машина" згідно з msdn.microsoft.com/en-US/en-en/library/windows/desktop/…
Євген Рябцев,

5
У нас були проблеми з цим методом, що працює у Windows 10 - отримання помилки "Другий фрагмент шляху не повинен бути ім'ям диска або UNC. Ім'я параметра: path2"
Дай Бок,

44

Використовуйте pipelist.exe від Sysinternals.


1
Див. Також handle.exe із sysinternals, який покаже майже всі речі, які мають відкриту ручку.
JimR

19

Я наткнувся на функцію в Chrome, яка перелічить усі відкриті іменовані канали, перейшовши до "file: //.//pipe//"

Оскільки я, здається, не можу знайти жодного посилання на це, і це мені дуже допомогло, я подумав, що можу поділитися.


Ви можете пояснити трохи більше?
Дітер Меемкен

Це робить список моїх труб. Дивовижний! (зауважте, це спрацює, бо працює як каталог, як показує відповідь Ендрю Шеперда)
Мартін Колл

Я думаю, це для налагодження / діагностики, оскільки я помітив, що Chrome використовує багато іменованих каналів - я знайшов 125 "хромованих" каналів, навіть коли Chrome не працює!
Коковалла



7

Другий конвеєр був інтерпретований цим веб-сайтом при поданні ... На початку потрібні дві зворотні скісні риски. Тож обов’язково використовуйте System.IO.Directory.GetFiles (@ "\\. \ Pipe \").

Зверніть увагу, що я бачив, як цей виклик функції викидає "нелегальні символи у шляху". виняток, коли одна з труб на моїй машині мала недійсні символи. PipleList.exe все ж працював нормально, тому це здається помилкою в .net-коді MS.


1
Примітка про "нелегальні символи у шляху" є важливим моментом, оскільки програми дуже часто відкривають імена каналів, які викликають це. Будь-яка програма, яка відкриває конвеєр з іменем like C:\myLocation\someFile.x, спричинить цю помилку.
dss539
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.