Làm cách nào để có được danh sách tất cả các đường dẫn có tên đang mở trong Windows?


86

Có cách nào dễ dàng để kiểm tra xem đường ống được đặt tên của bạn có hoạt động chính xác không? Tôi muốn đảm bảo rằng dữ liệu tôi đang gửi từ ứng dụng của mình đang thực sự được gửi. Có cách nào nhanh chóng và dễ dàng để lấy danh sách tất cả các đường ống được đặt tên không?

Câu trả lời:


95

Bạn có thể xem chúng bằng Process Explorer từ sysinternals. Sử dụng tùy chọn "Tìm -> Tìm Tay cầm hoặc DLL ..." và nhập mẫu "\ Device \ NamedPipe \". Nó sẽ cho bạn thấy quy trình nào có đường ống nào mở.


Kiểm tra phiên bản Process Explorer bạn có trước khi thử. Nó không hoạt động trên v15.23, nhưng hoạt động trên v16.02. (chưa thử các phiên bản khác)
Carl

2
Để tránh các trường hợp ngoại lệ có thể xảy ra - như đã được đề cập trong các câu trả lời khác - bạn có thể sử dụng giải pháp của tôi ở cấp độ thấp hơn nhưng hoạt động như một sự quyến rũ ngay cả khi tên của đường ống được đặt tên chứa các ký tự không hợp lệ theo cách đặt tên của tệp. Vui lòng xem stackoverflow.com/questions/25109491/…
user2126375

2
Sử dụng pipelist.exetừ SysInternals thậm chí còn đơn giản hơn, nhưng đó chỉ là dòng lệnh.
Chris Charabaruk

79

Trong bảng điều khiển Windows Powershell, nhập

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

Nếu phiên bản hệ điều hành của bạn lớn hơn Windows 7, bạn cũng có thể nhập
get-childitem \\.\pipe\

Điều này trả về một danh sách các đối tượng. Nếu bạn chỉ muốn tên:

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

3
Bạn có thể muốn xem xét việc mở Powershell như một quản trị viên
dotNetE

2
Bạn cũng có thể sử dụng get-childitem \\ \ ống \.
Chris Gillum

@ChrisGillum Tôi cố gắng đó, và nhận được một thông báo lỗi "Không thể tìm thấy con đường '\\ \ ống \.' Vì nó không tồn tại"
Andrew Shepherd

1
@AndrewShepherd Thật thú vị. Bạn đang chạy hệ điều hành nào? Nó hoạt động đối với tôi trên Windows Server 2012 và Windows 10 (PowerShell v3 và v5 tương ứng).
Chris Gillum

1
@ChrisGillum Nhưng tôi vừa thử nó trên thiết bị Windows Surface RT của mình. Nó hoạt động ở đó. (Powershell v4). Tôi sẽ kết hợp bình luận của bạn vào câu trả lời.
Andrew Shepherd,

57

Hãy thử những cách sau để thay thế:

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

6
bạn thiếu một dấu gạch chéo. string [] listOfPipes = System.IO.Directory.GetFiles (@ "\\. \ pipe \");
dmex

Tôi đã dành cả đêm để tìm kiếm một chức năng để tìm kiếm hoặc liệt kê các đường ống. Đây chính xác là những gì tôi cần. Cảm ơn!!
swax

Con đường này có gì đặc biệt? \\. \ dường như được sử dụng để truy cập thô vào ổ đĩa, nhưng nó pipeđến từ đâu?
Kevin Doyon

2
@Kevin "\\. \" Có nghĩa là "máy này" theo msdn.microsoft.com/en-US/en-en/library/windows/desktop/…
Eugene Ryabtsev

5
Chúng tôi đã có vấn đề với phương pháp này làm việc trên cửa sổ 10 - nhận được lỗi "Thứ hai mảnh con đường không phải là một ổ đĩa hoặc tên UNC Parameter tên:. Path2"
Đại Bok

44

Sử dụng pipelist.exe từ Sysinternals.


1
Xem thêm handle.exe từ sysinternals sẽ hiển thị hầu hết mọi thứ có một xử lý mở.
JimR

19

Tôi tình cờ gặp một tính năng trong Chrome sẽ liệt kê tất cả các đường dẫn có tên đang mở bằng cách điều hướng đến "tệp: //.//pipe//"

Vì tôi dường như không thể tìm thấy bất kỳ tài liệu tham khảo nào về điều này và nó rất hữu ích cho tôi, tôi nghĩ tôi có thể chia sẻ.


Bạn có thể giải thích thêm một chút không?
Dieter Meemken

Đây là danh sách các đường ống của tôi. Kinh ngạc! (lưu ý điều này sẽ hoạt động vì nó hoạt động giống như một thư mục, như câu trả lời của Andrew Shepherd cho thấy)
Martín Coll

Tôi đoán đây là để gỡ lỗi / chẩn đoán, vì tôi nhận thấy Chrome sử dụng rất nhiều đường ống được đặt tên - tôi đã tìm thấy 125 đường ống "chrome" ngay cả khi Chrome không chạy!
Cocowalla


8

Khi được CMDnhắc:

>ver

Microsoft Windows [Version 10.0.18362.476]

>dir \\.\pipe\\

Hoạt động trên W10 nhưng không hoạt động trên W7
cup

7

Đường ống thứ hai được trang web này diễn giải khi gửi ... Bạn cần có hai dấu gạch chéo ngược ở đầu. Vì vậy, hãy đảm bảo sử dụng System.IO.Directory.GetFiles (@ "\\. \ Pipe \").

Lưu ý rằng tôi đã thấy lệnh gọi hàm này ném một 'ký tự bất hợp pháp trong đường dẫn.' ngoại lệ khi một trong các đường ống trên máy của tôi có các ký tự không hợp lệ. Mặc dù vậy, PipleList.exe hoạt động tốt, vì vậy nó có vẻ như là một lỗi trong mã .net của MS.


1
Lưu ý về 'các ký tự bất hợp pháp trong đường dẫn' là một điểm quan trọng, bởi vì các chương trình mở tên ống dẫn kích hoạt điều này là rất phổ biến. Bất kỳ chương trình nào mở một đường ống có tên giống như C:\myLocation\someFile.xsẽ gây ra lỗi này.
dss539,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.