C# 如何关闭另一个程序使用的串行端口

C# 如何关闭另一个程序使用的串行端口,c#,serial-port,C#,Serial Port,我正在写一个串口程序。有时,当我想打开SerialPort时,会引发UnauthorizedAccessException:拒绝访问COM1。这是因为另一个程序(由其他人编写,我没有它的soucecode)正在使用COM1,并且该程序在退出时不会关闭COM1。 我想问两个问题: 如何在使用COM1时使用我的代码(特别是C#代码)关闭它 通过另一个程序 如果我不能用C#代码关闭COM1,我如何在Windows操作系统中关闭或释放COM1 谢谢。您可以通过拨打 serialPort.Close();

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

  • 如何在使用COM1时使用我的代码(特别是C#代码)关闭它 通过另一个程序
  • 如果我不能用C#代码关闭COM1,我如何在Windows操作系统中关闭或释放COM1

  • 谢谢。

    您可以通过拨打

    serialPort.Close();
    
    但是,除非仅由您打开,否则无法关闭通信端口


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

    此堆栈溢出问题是第一步:

    一旦有了这个句柄,您就可以修改那里的代码来关闭句柄,或者干脆终止打开句柄的进程

    然而,这是非常危险的*,容易出现问题,需要根据特定部署(x32 vs x64 vs ARM)以及特定机器上的“COM1”映射重新设计

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


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

    你没有回答我的问题。我知道serialPort.close()可以关闭我打开的serialPort。我想关闭由其他人编写的另一个程序打开的COM1。这就是我说的,你不能关闭其他应用程序访问的COMMPort。你唯一能做的就是确定哪个应用程序正在访问并终止这个进程。我不这么认为。我使用电脑,我可以写任何在上面运行的代码,我完全可以控制它。必须有办法关闭另一个程序使用的COM1。例如,查找并终止COM1使用的线程。我想找到一个简单的方法。你可以使用WMI关闭端口。我的猜测是占用Com端口的程序没有完全退出,因为windows应该恢复Com端口,您是否尝试查看进程是否仍在运行?我还认为某些程序在使用SerialPort后没有关闭它。但我不知道是哪一个。谢谢。我不知道COM1的文件名或文件句柄,您能告诉我吗?它看起来像
    \Device\Com0
    \Device\Serial0
    -请参阅-并用于浏览您机器的设备。