【发布时间】:2016-11-21 20:55:37
【问题描述】:
如下所示,我能够通过给定的 pid 和 vid 将 USB com 端口名称附加到 32 位 win7OS 机器,但是在 x64 中运行时,它卡在以下行:
comports.Add((string)rk6.GetValue("PortName"));
这是我的代码
static List<string> ComPortNames(String VID, String PID)
{
String pattern = String.Format("^VID_{0}.PID_{1}", VID, PID);
Regex _rx = new Regex(pattern, RegexOptions.IgnoreCase);
List<string> comports = new List<string>();
RegistryKey rk1 = Registry.LocalMachine;
RegistryKey rk2 = rk1.OpenSubKey("SYSTEM\\CurrentControlSet\\Enum");
foreach (String s3 in rk2.GetSubKeyNames())
{
RegistryKey rk3 = rk2.OpenSubKey(s3);
foreach (String s in rk3.GetSubKeyNames())
{
if (_rx.Match(s).Success)
{
RegistryKey rk4 = rk3.OpenSubKey(s);
foreach (String s2 in rk4.GetSubKeyNames())
{
RegistryKey rk5 = rk4.OpenSubKey(s2);
RegistryKey rk6 = rk5.OpenSubKey("Device Parameters");
comports.Add((string)rk6.GetValue("PortName"));
}
}
}
}
return comports;
}
实际代码获取here,那么如何获取x64中的com端口名称,有什么建议吗?
【问题讨论】:
-
这无法猜测,至少需要堆栈跟踪。
-
此方法返回连接我们设备的 com 端口列表,例如:COM3、COM4 等,问题是这在 x64 上不起作用
-
因为它可能与这里的其他人相关:简单的原因可能是由于
rk6是null,因为"Device Parameters"密钥并不存在于每个设备节点上,因此是与 32 位或 64 位版本的操作系统无关 -
@UdayaLakmal,Youkko 的回答是否解决了您的问题?如果可以,你能接受吗?