2011-12-24 69 views
2

我在寫一個通過向USB端口發送字節進行通信的應用程序。我想讓用戶選擇端口並執行此操作,我使用SerialPort.GetPortNames()。不幸的是,它返回一個空數組。該方法應該讀取註冊表中的數據(HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM),但是SERIALCOMM目錄缺失。當我在Linux上運行該程序時,它會按預期列出我的四個USB端口。如何修復註冊表/以不同方式發現端口?在C#中發現串行端口

+0

簡單的解釋是你的機器根本沒有任何串口。並非所有USB設備驅動程序都模擬一個串行端口。或者你可能有一個驅動程序安裝不正確的設備。您可以使用控制面板+設備管理器仔細檢查。詢問您在superuser.com使用的特定設備的問題。 – 2011-12-24 14:57:31

回答

1

SerialPort.GetPortNames()是發現串口的正確方法。但是,如果您使用Windows 7,我認爲這可能是該方法列出的註冊表項權限問題。我在Microsoft.com找到了一篇描述這個問題的文章。

+0

我的確在使用Windows 7。但是當我以管理員身份打開註冊表時,我仍然看不到該目錄。 – 2011-12-24 12:10:38

+0

此外,該解決方案創建目錄爲空。 – 2011-12-24 12:34:53

1

SerialPort.GetPortNames()返回安裝在機器上的COM端口列表,而不是USB端口。我不認爲Windows會爲您提供USB端口列表,只有USB設備可用。

儘管名稱爲「通用串行總線」,但它們不是「串行端口」的常規含義。