EnumPorts()在某些计算机上返回奇怪的错误
EnumPorts() returns strange error on some machines
我维护一个应用程序,该应用程序使用win32 EnumPorts()函数来帮助确定计算机上安装的串行端口集。我在一些计算机上看到过这样的情况:获取此信息的调用失败,GetLastError()代码为1722(RPC服务器不可用)。我认为这与注册表设置或所需服务被禁用有关,但到目前为止,我的搜索一直没有结果。其他人遇到过这个问题吗?
作为对Euro Micelli评论的回应。我特别尝试填写一个选择列表,允许用户选择一个可用的选择列表。首先,我完全依赖EnumPorts()来为我提供一个潜在串行端口名称的列表。然而,事实证明,它在几个方面是不可靠的:它并不总是提供完整的端口名称集,而且,正如我最近看到的,当"RPC服务不可用"时,它可能会完全无法运行。为什么需要RPC来找出本地机器上有哪些可用的端口,我完全无法理解,但事实确实如此。后一个问题是最后一根稻草。到目前为止,我完全依赖于提供的名称列表,使用GetDefaultCommConfig()函数过滤这些名称,以确定我所想到的每个名称的确切性质。
根据我的经验,前面提到的注册表项提供的名称列表是获取端口名称的最可靠方法。事实上,当我在设备设备管理器中禁用端口驱动程序时,我可以看到密钥得到更新。根据正常的经验,我同意这样的评估,即依赖特定的钥匙充满了危险。然而,在这种情况下,M$从未提供一个像样的机制来评估可用端口的名称。
我应该指出,我已经用一种扫描注册表项的算法替换了对EnumPorts()的调用:HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM的串行端口名。这应该会在我的软件发布后解决问题。我所追求的是可以提供给目前正在使用已发布包的客户的指针。
我不是EnumPorts方面的专家,但我强烈建议不要依赖注册表项。
- 关键定义可能在未来发生变化
- 关键定义可能不是你想的那样
- 可能有一些方法可以"成为一个串行端口",但不包括这些密钥
- 密钥可能无法反映最新状态等
您应该始终依赖可用的API。
如果API不为您服务,让我们试着找出原因。也许有一点额外的信息,我们可以更好地帮助:
您到底需要对串行端口做什么?
现在有很多奇怪的串行端口:USB串行电缆、蓝牙、带GPS的手机调制解调器,。。。它可能是插在电脑上的东西,从此被遗忘了很久。
要找出导致问题的端口,您可以尝试进入设备管理器,在"查看"选项卡中选择"显示隐藏设备",然后删除它们,直到问题消失。这可能会让你专注于这个问题。
我知道这不是您问题的直接答案,但您是否考虑过使用不同的方法来枚举串行端口?在我的应用程序中,我使用设置API,使用来自P J Naughter网站的代码:http://www.naughter.com/enumser.html,我发现它运行良好。
我知道这个问题非常古老,但我今天偶然发现了它,并注意到没有人给出解释。
RPC的原因是因为您正在调用后台处理程序函数——您要求后台打印程序返回打印机端口列表,在大多数情况下,该列表恰好包括COM端口。我相信这可以解释你的结果有点不可靠。
RPC用于将请求从进程传递到活动后台处理程序进程,当后台处理程序服务未运行(或未正确响应)时,会出现RPC Server is unavailable
消息。
- (C++)分析树以计算返回错误值的简单算术表达式
- glad 导致 glfwSwapBuffers 返回错误消息
- 我的模板类方法返回错误类型?
- 共享内存:MapViewOfFile 返回错误 5
- 使用 std::forward_list 返回错误的队列实现
- FFMPEG:sws_scale返回错误:切片参数 0, 2160 无效
- __int64 CString 返回错误的值 - C++ MFC
- C++ OpenGL 中,绘制形状返回错误
- Python os.system() 返回错误值
- 函数从指针 c++ 中获取错误的值并返回错误的答案
- LibClang clang_getArgType() 返回错误的类型
- 除法函数返回错误的值
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 矩阵逆变器返回错误的反转
- openCL-创建子缓冲区返回错误代码13
- Qt SQL LIKE语句返回错误
- GetLastError()从FtpPutFile()返回错误6
- PfCreateInterface返回错误120(未实现)
- 为什么 Pa_GetStreamTime() 返回错误?
- G++ 在尝试使用 G++ 使用 openCV 进行编译后返回错误