c# - 如何关闭另一个程序使用的串口

标签 c# serial-port

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

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

谢谢。

最佳答案

这个 Stack Overflow 问题是第一步:How do I get the list of open file handles by process in C#?

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

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

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

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

关于c# - 如何关闭另一个程序使用的串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11183348/

相关文章:

c# - 甘特图asp.net

c# - COM 端口 - 如何识别设备 (.net/c#)

macos - Mac 上使用 socat 的 USB 串行端口

c# - 如何使用 Reactive Extensions 解析来自串口的字符流?

c# - 适用于 C# 的 Google map API

c# - UrlPathEncode 与 UrlEncode

c# - 我应该用什么来传递参数? C# 中的列表/数组/对象

c# - 如何将多个枚举值分配给 Spring.NET 配置中的属性?

java - java中串口如何 "echo off"

serial-port - 是否有通过串行端口传递零件号的约定?