我正在开发一个使用COM端口与外部控制器通信的应用程序。当我连接了通信电缆并重新启动PC时,Windows(7)会自动打开这个端口,即使没有任何应用程序运行,所以我就无法再次访问它。我试图通过编程的方式关闭它,但是它一直被占用着。有人有办法强制关闭它吗?有没有什么程序可以在我的应用程序之前运行,或者有没有一种无论如何都能编程地关闭它的方法?
虽然我无法关闭端口,但经过大量搜索和测试,我找到了问题的根源。我发表此解决方案是为了帮助遇到同样问题的人。
Windows将与串行端口连接的恒定数据流设备识别为串行鼠标(在该系统中为Microsoft Serial Ballpoint),并尝试安装它们,接管控制端口而不使用任何进程。解决方法是等待Windows安装该设备(在“鼠标和其他指针设备”下检查设备管理器),然后禁用它。如果卸载该设备,它将被重新安装,问题将重现。
感谢每个试图提供帮助的人,我希望其他人也能从这个解决方案中受益。
不能强制关闭端口(请参见此问题)。没有办法强制其他进程关闭端口,以便您可以使用它。
但是,Windows本身并没有打开该端口-可能是后台运行的某个其他应用程序在打开它。下载Process Explorer并使用“查找”菜单上的“查找句柄或DLL”来查找打开COM端口的进程。如果它是机器上的物理COM端口,则名称将为Serial0、Serial1、...或SerialN,其中COM1映射到Serial0。如果这是USB转COM适配器,则不确定设备ID是什么。
您也可以尝试使用PortMon来监视端口上的活动。PortMon将显示具有打开端口的进程。
我的解决方法是关闭持续输出的设备,拔出 USB,再次插入以让 Windows 检测 COM 号码,然后再打开设备。
我猜测当您关闭应用程序并重新启动计算机时,外部控制器没有优雅地关闭其一侧的事物,并处于未定义状态。
当计算机重新启动时,控制器仍处于此非法状态,看起来您无法在计算机上打开端口,因为通信无法正确重新建立。
也许外部控制器没有正确处理DTR / DSR线的状态变化?
PC和控制器之间的电缆如何连接?
如果不知道任何具体信息,很难说更多。