我维护一个使用win32 EnumPorts()函数的应用程序,以帮助确定计算机上安装的串行端口集。我在某些计算机上看到过这样的情况,其中获取此信息的调用失败,并且GetLastError()代码为1722(RPC服务器不可用)。我认为这与注册表设置或必需的服务被禁用有关,但是到目前为止,我的搜索还是没有结果。还有其他人遇到过这个问题吗?
回答Euro Micelli的评论。我专门尝试填写选择列表,允许用户选择可用的选择列表。首先,我仅依靠EnumPorts()为我提供潜在的串行端口名称列表。但事实证明,它是不可靠的:在某些方面,它并不总是提供完整的端口名,而且,正如我最近看到的那样,当“RPC服务不可用”时,它可能无法完全起作用。为什么需要RPC来找出本地计算机上可用的端口,这完全超出了我的范围,但是确实存在。后一个问题是最后一根稻草。到目前为止,我完全依靠提供的名称列表,使用GetDefaultCommConfig()函数过滤这些名称,以确定我想到的每个名称的确切性质。
以我的经验,由前面提到的注册表项提供的名称列表一直是获取端口名称的最可靠方法。实际上,我在禁用设备设备管理器中的端口驱动程序时看到密钥已更新。根据正常经验,我同意这样的评估,即依赖特定密钥会带来很多危险。但是,在这种情况下,M $从未提供一种体面的机制来评估可用端口的名称。
我应该指出,我已经用一种扫描注册表项的算法替换了对EnumPorts()的调用:串行端口名称的HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM。我的软件发布后,这应该可以解决该问题。我所追求的是可以为当前正在使用已发布软件包的客户提供的指针。
最佳答案
我不是EnumPorts的专家,但是我强烈建议不要依赖注册表项。
您应该始终依靠可用的API。
如果API不适用于您,让我们尝试找出原因。也许有一些额外的信息,我们可以提供更好的帮助:
您到底需要对串行端口做什么?
关于c++ - EnumPorts()在某些计算机上返回奇怪的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/184448/