3

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

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

谢谢。

4

2 回答 2

6

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

一旦你有了它,你可以修改那里的代码来关闭句柄,或者干脆杀死打开句柄的进程。

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

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

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

于 2012-06-25T04:17:10.887 回答
-2

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

serialPort.Close();

但是您不能关闭 COMM 端口,除非它仅由您打开。

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

于 2012-06-25T04:01:08.600 回答