Как получить список всех открытых именованных каналов в Windows?


87

Есть ли простой способ проверить, правильно ли работает ваш именованный канал? Я хочу убедиться, что данные, которые я отправляю из своего приложения, действительно отправляются. Есть ли быстрый и простой способ получить список всех именованных каналов?

Ответы:


95

Вы можете просмотреть их с помощью Process Explorer из sysinternals. Используйте опцию «Найти -> Найти дескриптор или DLL ...» и введите шаблон «\ Device \ NamedPipe \». Он покажет вам, какие процессы открывают какие каналы.


Перед тем, как попробовать, проверьте, какая у вас версия Process Explorer. Он не работает на v15.23, но работает на v16.02. (другие версии не пробовал)
Carl

2
Чтобы избежать возможных исключений, как упоминается в других ответах, вы можете использовать мое решение, которое является более низким уровнем, но работает как шарм, даже если имя именованного канала содержит недопустимые символы в качестве имени файла. Пожалуйста , см stackoverflow.com/questions/25109491/...
user2126375

2
Использование pipelist.exeиз SysInternals еще проще, но это только командная строка.
Крис Чарабарук

80

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

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

Если версия вашей ОС выше, чем Windows 7, вы также можете ввести
get-childitem \\.\pipe\

Это возвращает список объектов. Если вам нужно только имя:

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

3
Вы можете рассмотреть возможность открытия Powershell от имени администратора
dotNetE

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

@ChrisGillum Я пробовал это и получил ошибку «Не могу найти путь '\\. \ Pipe \', потому что он не существует»
Эндрю Шеперд

1
@AndrewShepherd Интересно. На какой ОС вы работаете? У меня он работает на Windows Server 2012 и Windows 10 (PowerShell v3 и v5 соответственно).
Крис Гиллум

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. Имя параметра: путь2»
Дай Бок

44

Используйте pipelist.exe от Sysinternals.


1
См. Также handle.exe из sysinternals, который покажет почти все вещи с открытым дескриптором.
JimR 03

19

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

Поскольку я не могу найти никаких ссылок на это, и это было очень полезно для меня, я подумал, что могу поделиться.


Не могли бы вы объяснить немного больше?
Дитер Мемкен

Это список моих трубок. Удивительный! (обратите внимание, что это будет работать, потому что он работает как каталог, как показывает ответ Эндрю Шеперда)
Мартин Колл,

Я предполагаю, что это для отладки / диагностики, так как я заметил, что Chrome использует много именованных каналов - я обнаружил 125 «хромированных» каналов, даже когда Chrome не запущен!
Cocowalla



7

Второй канал был интерпретирован этим веб-сайтом при отправке ... Вам нужны две обратные косые черты в начале. Поэтому обязательно используйте System.IO.Directory.GetFiles (@ "\\. \ Pipe \").

Обратите внимание, что я видел, как этот вызов функции выдавал «недопустимые символы в пути». исключение, когда в одной из каналов на моей машине были недопустимые символы. PipleList.exe работал нормально, так что это похоже на ошибку в коде MS .net.


1
Замечание о «недопустимых символах в пути» является важным моментом, потому что очень часто программы открывают имена каналов, которые вызывают это. Любая программа, открывающая канал с именемC:\myLocation\someFile.x , вызовет эту ошибку.
dss539
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.