如何关闭另一个程序使用的serialport

我正在写一个SerialPort程序。 有时,当我想打开SerialPort时,会抛出UnauthorizedAccessException:拒绝访问COM1。 这是因为另一个程序(由其他人编写而我没有其源代码)正在使用COM1,并且该程序在退出时不会关闭它。 我想问两个问题:

  1. 当另一个程序使用COM1时,如何用我的代码(特别是C#代码)关闭它?
  2. 如果我无法用C#代码关闭COM1,如何在Windows操作系统中关闭或释放COM1?

谢谢。

此Stack Overflow问题是第一步: 如何通过C#中的进程获取打开文件句柄列表?

完成后,您可以修改那里的代码以关闭句柄,或者简单地终止打开句柄的进程。

然而,这非常冒险*,容易出现问题,需要根据特定部署(x32 vs x64 vs ARM)以及’COM1’映射到该特定计算机上的内容进行重新设计。

风险:如果正在使用串行端口,例如,在手机或类似设备上安装新固件 – 关闭端口可能会导致设备变砖。 如果端口用于传输数据,则关闭端口可能会导致数据丢失。

祝好运。 但是,如果您破坏系统或丢失数据,请不要责怪我。

您可以通过调用关闭C#中的comm端口

 serialPort.Close(); 

但除非仅由您打开,否则无法关闭COMM端口。

确保在关闭应用程序时关闭通讯端口。 如果您可以放置​​代码,我们可以查看它。