มีวิธีง่ายๆในการทดสอบว่าท่อที่ตั้งชื่อของคุณทำงานถูกต้องหรือไม่? ฉันต้องการตรวจสอบให้แน่ใจว่ามีการส่งข้อมูลที่ฉันกำลังส่งจากแอปของฉันอยู่จริง มีวิธีที่ง่ายและรวดเร็วในการรับรายการท่อที่มีชื่อทั้งหมดหรือไม่?
มีวิธีง่ายๆในการทดสอบว่าท่อที่ตั้งชื่อของคุณทำงานถูกต้องหรือไม่? ฉันต้องการตรวจสอบให้แน่ใจว่ามีการส่งข้อมูลที่ฉันกำลังส่งจากแอปของฉันอยู่จริง มีวิธีที่ง่ายและรวดเร็วในการรับรายการท่อที่มีชื่อทั้งหมดหรือไม่?
คำตอบ:
คุณสามารถดูได้ด้วยProcess Explorerจาก sysinternals ใช้ตัวเลือก "Find -> Find Handle หรือ DLL ... " และป้อนรูปแบบ "\ Device \ NamedPipe \" จะแสดงให้คุณเห็นว่ากระบวนการใดที่ท่อเปิด
pipelist.exe
จาก SysInternals นั้นง่ายกว่า แต่เป็นบรรทัดคำสั่งเท่านั้น
ในคอนโซล Windows Powershell ให้พิมพ์
[System.IO.Directory]::GetFiles("\\.\\pipe\\")
get-childitem \\.\pipe\
สิ่งนี้ส่งคืนรายการของวัตถุ หากคุณต้องการชื่อเท่านั้น:
(get-childitem \\.\pipe\).FullName
(ตัวอย่างที่สองใช้\\.\pipe\
ไม่ได้ใน Powershell 7 แต่ตัวอย่างแรกทำ)
ลองทำสิ่งต่อไปนี้แทน:
String[] listOfPipes = System.IO.Directory.GetFiles(@"\\.\pipe\");
pipe
มาจากไหน?
ใช้pipelist.exeจาก Sysinternals
ฉันเจอฟีเจอร์ใน Chrome ที่จะแสดงรายการไปป์ที่เปิดชื่อทั้งหมดโดยไปที่ "file: //.//pipe//"
เนื่องจากฉันไม่พบข้อมูลอ้างอิงใด ๆ เกี่ยวกับเรื่องนี้และเป็นประโยชน์กับฉันมากฉันจึงคิดว่าจะแบ่งปัน
ค#:
String[] listOfPipes = System.IO.Directory.GetFiles(@"\\.\pipe\");
เมื่อCMD
แจ้ง:
>ver
Microsoft Windows [Version 10.0.18362.476]
>dir \\.\pipe\\
ท่อที่สองถูกตีความโดยเว็บไซต์นี้เมื่อส่ง ... คุณต้องมีแบ็กสแลชสองตัวที่จุดเริ่มต้น ดังนั้นอย่าลืมใช้ System.IO.Directory.GetFiles (@ "\\. \ pipe \")
โปรดทราบว่าฉันเคยเห็นการเรียกใช้ฟังก์ชันนี้ทำให้เกิด 'อักขระที่ผิดกฎหมายในเส้นทาง ข้อยกเว้นเมื่อท่อใดท่อหนึ่งบนเครื่องของฉันมีอักขระที่ไม่ถูกต้อง PipleList.exe ทำงานได้ดีดังนั้นดูเหมือนว่าจะมีข้อผิดพลาดในรหัส. net ของ MS
C:\myLocation\someFile.x
จะทำให้เกิดข้อผิดพลาดนี้