Bagaimana saya bisa mendapatkan daftar semua pipa bernama terbuka di Windows?

91

Adakah cara mudah untuk menguji apakah pipa bernama Anda berfungsi dengan benar? Saya ingin memastikan bahwa data yang saya kirim dari aplikasi saya benar-benar terkirim. Adakah cara cepat dan mudah untuk mendapatkan daftar semua pipa bernama?

Doug T.
sumber

Jawaban:

98

Anda dapat melihatnya dengan Process Explorer dari sysinternals. Gunakan opsi "Temukan -> Temukan Tangani atau DLL ..." dan masukkan pola "\ Device \ NamedPipe \". Ini akan menunjukkan kepada Anda proses mana yang memiliki pipa terbuka.

Rob Walker
sumber
Periksa versi Process Explorer yang Anda miliki sebelum Anda mencoba ini. Ini tidak bekerja pada v15.23, tetapi bekerja pada v16.02. (belum mencoba versi lain)
Carl
2
Untuk menghindari kemungkinan pengecualian - seperti yang disebutkan dalam jawaban lain - Anda dapat menggunakan solusi saya yang tingkatnya lebih rendah tetapi berfungsi seperti pesona bahkan jika nama pipa yang diberi nama mengandung karakter yang tidak valid dalam nama file. Silakan lihat stackoverflow.com/questions/25109491/…
user2126375
2
Menggunakan pipelist.exedari SysInternals bahkan lebih sederhana, tetapi itu hanya baris perintah.
Chris Charabaruk
84

Di konsol Windows Powershell, ketik

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

Jika versi OS Anda lebih besar dari Windows 7, Anda juga dapat mengetik
get-childitem \\.\pipe\

Ini mengembalikan daftar objek. Jika Anda ingin namanya saja:

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

(Contoh kedua \\.\pipe\ tidak berfungsi di Powershell 7, tetapi contoh pertama berfungsi)

Andrew Shepherd
sumber
3
Anda mungkin ingin mempertimbangkan untuk membuka Powershell sebagai administrator
dotNetE
2
Anda juga dapat menggunakan get-childitem \\. \ Pipe \
Chris Gillum
@ChrisGillum Saya mencobanya, dan mendapat pesan kesalahan "Tidak dapat menemukan jalur '\\. \ Pipa \' karena tidak ada"
Andrew Shepherd
1
@AndShephering Menarik. OS apa yang Anda jalankan? Ini berfungsi untuk saya di Windows Server 2012 dan Windows 10 (masing-masing PowerShell v3 dan v5).
Chris Gillum
1
@ChrisGillum Tapi saya baru saja mencobanya di perangkat Windows Surface RT saya. Ini bekerja di sana. (Powershell v4). Saya akan memasukkan komentar Anda ke dalam jawabannya.
Andrew Shepherd
57

Coba yang berikut ini sebagai gantinya:

String[] listOfPipes = System.IO.Directory.GetFiles(@"\\.\pipe\");
Vincent Lidou
sumber
6
Anda kehilangan garis miring. string [] listOfPipes = System.IO.Directory.GetFiles (@ "\\. \ pipe \");
dmex
Saya menghabiskan sepanjang malam mencari fungsi untuk mencari atau membuat daftar pipa. Inilah yang saya butuhkan. Terima kasih!!
swax
Apakah jalan khusus ini? \\. \ tampaknya digunakan untuk akses mentah ke drive, tetapi dari mana pipeasalnya?
Kevin Doyon
2
@Kevin "\\. \" Berarti "mesin ini" sesuai msdn.microsoft.com/en-US/en-en/library/windows/desktop/…
Eugene Ryabtsev
5
Kami mengalami masalah dengan metode ini yang bekerja pada windows 10 - mendapatkan kesalahan "Fragmen jalur kedua tidak boleh berupa drive atau nama UNC. Nama parameter: jalur2"
Dai Bok
45

Gunakan pipelist.exe dari Sysinternals.

Jay
sumber
1
Lihat juga handle.exe dari sysinternals yang akan menampilkan hampir semua hal yang memiliki pegangan terbuka.
JimR
19

Saya menemukan fitur di Chrome yang akan mencantumkan semua pipa bernama terbuka dengan menavigasi ke "file: //.//pipe//"

Karena saya tidak dapat menemukan referensi apa pun tentang ini dan itu sangat membantu saya, saya pikir saya dapat berbagi.

Daynew
sumber
Bisakah Anda menjelaskan lebih banyak?
Dieter Meemken
Ini daftar pipa saya. Luar biasa! (perhatikan ini akan berfungsi karena berfungsi seperti direktori, seperti yang ditunjukkan oleh jawaban Andrew Shepherd)
Martín Coll
Saya kira ini untuk debugging / diagnostik, karena saya perhatikan Chrome menggunakan banyak pipa bernama - Saya menemukan 125 pipa "chrome" bahkan ketika Chrome tidak berjalan!
Cocowalla
17

C #:

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

Pada CMDprompt:

>ver

Microsoft Windows [Version 10.0.18362.476]

>dir \\.\pipe\\
Constantin Konstantinidis
sumber
Bekerja pada W10 tetapi tidak pada W7
cup
7

Pipa kedua diinterpretasikan oleh situs web ini ketika dikirim ... Anda membutuhkan dua garis miring terbalik di awal. Jadi pastikan untuk menggunakan System.IO.Directory.GetFiles (@ "\\. \ Pipe \").

Perhatikan bahwa saya telah melihat panggilan fungsi ini melontarkan 'karakter ilegal di jalur'. pengecualian ketika salah satu pipa di mesin saya memiliki karakter yang tidak valid. PipleList.exe bekerja dengan baik, jadi sepertinya ada bug di kode .net MS.

Vincent Lidou
sumber
1
Catatan tentang 'karakter ilegal di jalur' adalah poin penting, karena program sangat umum untuk membuka nama pipa yang memicu ini. Program apa pun yang membuka pipa bernama like C:\myLocation\someFile.xakan menyebabkan kesalahan ini.
dss539