Как получить список всех открытых именованных каналов в 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.