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?

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.


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)


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\");

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


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.


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.


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



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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.