【发布时间】:2008-10-08 19:26:42
【问题描述】:
我维护了一个应用程序,它使用 win32 EnumPorts() 函数来帮助确定计算机上安装的串行端口集。我在某些计算机上看到了获取此信息的调用失败的情况,GetLastError() 代码为 1722(RPC 服务器不可用)。我认为这与注册表设置或所需服务被禁用有关,但到目前为止我的搜索相当无果。有没有其他人遇到过这个问题?
回答 Euro Micelli 的 cmets。我特别试图填写一个允许用户选择可用选项列表的选项列表。首先,我完全依赖 EnumPorts() 来为我提供一个可能的串行端口名称列表。它已被证明是不可靠的,但在几个方面:它并不总是提供完整的端口名称集,而且,正如我最近看到的,当“RPC 服务不可用”时,它可能完全无法运行。为什么需要 RPC 来找出本地计算机上可用的端口完全超出了我的范围,但它确实存在。后一个问题是最后一根稻草。就完全依赖提供的名称列表而言,我使用 GetDefaultCommConfig() 函数过滤这些名称以确定我想出的每个名称的确切性质。
根据我的经验,前面提到的注册表项提供的名称列表是获取端口名称的最可靠方法。事实上,当我在设备设备管理器中禁用端口驱动程序时,我可以看到密钥得到更新。在正常经验下,我同意依赖特定密钥充满危险的评估。然而,在这种情况下,M$ 从来没有提供一个像样的机制来评估可用端口的名称。
我应该指出,我已经用扫描注册表项的算法替换了对 EnumPorts() 的调用:HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM 以获取串行端口名称。一旦我的软件发布,这应该可以解决问题。我所追求的是可以给目前正在使用已发布包的客户的指点。
【问题讨论】: