我维护使用win32 EnumPorts()函数来帮助确定计算机上安装的一组串行端口的应用程序。我在某些计算机上看到过使用GetLastError()代码为1722(RPC服务器不可用)的调用获取此信息失败的情况。我认为这与注册表设置或所需服务被禁用有关,但迄今为止我的搜索没有结果。有没有遇到过这个问题?EnumPorts()在某些机器上返回奇怪的错误
回答Euro Micelli的评论。我特意试图填写一个选择列表,以便用户选择一个可用的选项列表。首先,我完全依赖EnumPorts()为我提供了一个潜在的串行端口名称列表。但事实证明,这种做法在某种程度上并不可靠:它并不总是提供一组完整的端口名称,正如我最近看到的,当“RPC服务不可用”时它可能无法完全运行。为什么需要RPC来查明本地计算机上的可用端口是否完全超出了我的范围,但它的确存在。后一个问题是最后一根稻草。至于完全依赖提供的名称列表,我使用GetDefaultCommConfig()函数过滤这些名称以确定每个名称的确切性质。
根据我的经验,前面提到的注册表项提供的名称列表一直是获取端口名称最可靠的方法。事实上,我可以在设备设备管理器中禁用端口驱动程序时看到密钥更新。在正常的经验下,我同意评估依赖特定密钥充满危险。但是,在这种情况下,M $从未提供过体面机制来评估可用端口的名称。
我应该指出,我已经用扫描注册表项的算法替换了对EnumPorts()的调用:HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM用于串行端口名称。一旦我的软件发布,这应该可以解决问题。我所追求的是可以给予目前正在使用已发布软件包的客户的指针。
我都试过,都没有用。这个问题似乎是EnumPorts()是无法连接到本地机器(我假设的是,为什么RPC服务器相关) – 2008-10-08 20:01:39