我正在编写一个 SerialPort 程序。有时当我想打开 SerialPort 时,会抛出 UnauthorizedAccessException :拒绝访问 COM1。这是因为另一个程序(由其他人编写,我没有它的源代码)正在使用 COM1,并且该程序在退出时不会关闭 COM1。我想问2个问题:
- 当 COM1 被另一个程序使用时,如何用我的代码(尤其是 C# 代码)关闭它?
- 如果无法使用 C# 代码关闭 COM1,如何在 Windows 操作系统中关闭或释放 COM1?
谢谢。
我正在编写一个 SerialPort 程序。有时当我想打开 SerialPort 时,会抛出 UnauthorizedAccessException :拒绝访问 COM1。这是因为另一个程序(由其他人编写,我没有它的源代码)正在使用 COM1,并且该程序在退出时不会关闭 COM1。我想问2个问题:
谢谢。
这个 Stack Overflow 问题是第一步:如何在 C# 中按进程获取打开文件句柄的列表?
一旦你有了它,你可以修改那里的代码来关闭句柄,或者干脆杀死打开句柄的进程。
然而,这是非常危险的*,容易出现问题,并且需要根据特定的部署(x32 与 x64 与 ARM)以及“COM1”映射到该特定机器上的内容进行重新设计。
有风险:如果串行端口用于例如在手机或类似设备上安装新固件 - 关闭端口可能会导致设备变砖。如果端口正在用于传输数据,则关闭端口可能会导致数据丢失。
祝你好运。但是,如果您破坏系统或丢失数据,请不要怪我。
您可以通过调用关闭 C# 中的 comm 端口
serialPort.Close();
但是您不能关闭 COMM 端口,除非它仅由您打开。
确保在关闭应用程序时关闭通信端口。如果您可以放置代码,我们可以查看它。