ฉันจะรับรายชื่อไปป์ที่เปิดชื่อทั้งหมดใน Windows ได้อย่างไร


91

มีวิธีง่ายๆในการทดสอบว่าท่อที่ตั้งชื่อของคุณทำงานถูกต้องหรือไม่? ฉันต้องการตรวจสอบให้แน่ใจว่ามีการส่งข้อมูลที่ฉันกำลังส่งจากแอปของฉันอยู่จริง มีวิธีที่ง่ายและรวดเร็วในการรับรายการท่อที่มีชื่อทั้งหมดหรือไม่?

คำตอบ:


98

คุณสามารถดูได้ด้วยProcess Explorerจาก sysinternals ใช้ตัวเลือก "Find -> Find Handle หรือ DLL ... " และป้อนรูปแบบ "\ Device \ NamedPipe \" จะแสดงให้คุณเห็นว่ากระบวนการใดที่ท่อเปิด


ตรวจสอบว่าคุณมี Process Explorer เวอร์ชันใดก่อนที่จะลองใช้ ไม่ทำงานบน v15.23 แต่ทำงานบน v16.02 (ยังไม่ได้ลองรุ่นอื่น)
Carl

2
เพื่อหลีกเลี่ยงข้อยกเว้นที่เป็นไปได้ - ตามที่กล่าวไว้ในคำตอบอื่น ๆ - คุณสามารถใช้โซลูชันของฉันซึ่งอยู่ในระดับต่ำกว่า แต่ทำงานได้อย่างมีเสน่ห์แม้ว่าชื่อของท่อที่ตั้งชื่อจะมีอักขระที่ไม่ถูกต้องในลักษณะของชื่อไฟล์ก็ตาม โปรดดูstackoverflow.com/questions/25109491/…
user2126375

2
การใช้งานpipelist.exeจาก SysInternals นั้นง่ายกว่า แต่เป็นบรรทัดคำสั่งเท่านั้น
Chris Charabaruk

84

ในคอนโซล Windows Powershell ให้พิมพ์

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

หากเวอร์ชัน OS ของคุณมากกว่า Windows 7 คุณสามารถพิมพ์
get-childitem \\.\pipe\

สิ่งนี้ส่งคืนรายการของวัตถุ หากคุณต้องการชื่อเท่านั้น:

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

(ตัวอย่างที่สองใช้\\.\pipe\ ไม่ได้ใน Powershell 7 แต่ตัวอย่างแรกทำ)


3
คุณอาจต้องการพิจารณาเปิด Powershell ในฐานะผู้ดูแลระบบ
dotNetE

2
คุณยังสามารถใช้ get-childitem \\. \ pipe \
Chris Gillum

@ChrisGillum ฉันลองแล้วและได้รับข้อผิดพลาด "ไม่พบเส้นทาง" \\. \ ไปป์ \ 'เพราะไม่มีอยู่จริง "
Andrew Shepherd

1
@AndrewShepherd น่าสนใจ คุณใช้ระบบปฏิบัติการอะไร มันใช้ได้กับฉันใน Windows Server 2012 และ Windows 10 (PowerShell v3 และ v5 ตามลำดับ)
Chris Gillum

1
@ChrisGillum แต่ฉันเพิ่งลองใช้กับอุปกรณ์ Windows Surface RT ของฉัน มันทำงานที่นั่น (Powershell v4) ฉันจะรวมความคิดเห็นของคุณไว้ในคำตอบ
Andrew Shepherd

57

ลองทำสิ่งต่อไปนี้แทน:

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

6
คุณขาดสแลช สตริง [] listOfPipes = System.IO.Directory.GetFiles (@ "\\. \ pipe \");
dmex

ฉันใช้เวลาทั้งคืนเพื่อค้นหาฟังก์ชันเพื่อค้นหาหรือแสดงรายการท่อ นี่คือสิ่งที่ฉันต้องการ ขอบคุณ !!
swax

เส้นทางพิเศษนี้คืออะไร? \\. \ ดูเหมือนจะใช้สำหรับการเข้าถึงไดรฟ์แบบดิบ แต่pipeมาจากไหน?
Kevin Doyon

2
@Kevin "\\. \" หมายถึง "เครื่องนี้" ตามmsdn.microsoft.com/en-US/en-en/library/windows/desktop/…
Eugene Ryabtsev

5
เรามีปัญหาเกี่ยวกับวิธีการนี้ที่ทำงานบน windows 10 - ได้รับข้อผิดพลาด "ส่วนของเส้นทางที่สองต้องไม่ใช่ชื่อไดรฟ์หรือชื่อ UNC ชื่อพารามิเตอร์: path2"
Dai Bok


19

ฉันเจอฟีเจอร์ใน Chrome ที่จะแสดงรายการไปป์ที่เปิดชื่อทั้งหมดโดยไปที่ "file: //.//pipe//"

เนื่องจากฉันไม่พบข้อมูลอ้างอิงใด ๆ เกี่ยวกับเรื่องนี้และเป็นประโยชน์กับฉันมากฉันจึงคิดว่าจะแบ่งปัน


ช่วยอธิบายอีกนิดได้ไหม
Dieter Meemken

นี่แสดงรายการท่อของฉัน สุดทึ่ง! (โปรดทราบว่าจะใช้งานได้เพราะทำงานเหมือนไดเร็กทอรีดังที่คำตอบของ Andrew Shepherd แสดง)
Martín Coll

ฉันเดาว่านี่ใช้สำหรับการดีบัก / การวินิจฉัยเนื่องจากฉันสังเกตเห็นว่า Chrome ใช้ไปป์ที่มีชื่อจำนวนมาก - ฉันพบท่อ "chrome" 125ท่อแม้ว่า Chrome จะไม่ทำงานก็ตาม!
Cocowalla



7

ท่อที่สองถูกตีความโดยเว็บไซต์นี้เมื่อส่ง ... คุณต้องมีแบ็กสแลชสองตัวที่จุดเริ่มต้น ดังนั้นอย่าลืมใช้ System.IO.Directory.GetFiles (@ "\\. \ pipe \")

โปรดทราบว่าฉันเคยเห็นการเรียกใช้ฟังก์ชันนี้ทำให้เกิด 'อักขระที่ผิดกฎหมายในเส้นทาง ข้อยกเว้นเมื่อท่อใดท่อหนึ่งบนเครื่องของฉันมีอักขระที่ไม่ถูกต้อง PipleList.exe ทำงานได้ดีดังนั้นดูเหมือนว่าจะมีข้อผิดพลาดในรหัส. net ของ MS


1
หมายเหตุเกี่ยวกับ "อักขระที่ไม่ถูกต้องในเส้นทาง" เป็นจุดสำคัญเนื่องจากเป็นเรื่องปกติมากที่โปรแกรมจะเปิดชื่อไปป์ที่เรียกสิ่งนี้ โปรแกรมใด ๆ ที่เปิดไปป์ชื่อ like C:\myLocation\someFile.xจะทำให้เกิดข้อผิดพลาดนี้
dss539
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.