我正在使用 Visual Studio 开发 C#/WPF 应用程序。这个应用程序使用一个 com 端口,然后在退出时释放它。我经常使用调试器来运行和停止这个应用程序。有时,在启动调试会话时出现异常,提示 com 端口已在使用中。
代码总是在退出时关闭打开的 com 端口,所以我运行 portmon 来查看谁在使用该端口。事实证明,在“正常”情况下,端口被我的应用程序(portmon 中的 Process KaleidoscopeApp)抓取、使用和关闭。在未释放端口的情况下,该端口正被 Visual Studio 本身的进程“devenv”使用。
为什么在这些情况下 devenv 是 com 端口的所有者?当我关闭应用程序时,为什么它继续持有它?只有当我关闭 Visual Studio 时才会释放端口。这是一种奇怪的行为,尤其是因为调试器已在 Visual Studio 中特别停止。
这是来自 portmon 的捕获,显示了对 com 端口的访问。您可以看到一个典型的会话以 IRP_MJ_CREATE 开始并以 IRP_MJ_CLOSE 结束。KaleidoscopeApp 总是如此。您可以看到最后一位是由 devenv 运行的。然而,每次启动总是在 VS 调试器中。
357 0.11112275 KaleidoscopeApp IRP_MJ_CREATE Serial4 SUCCESS 选项:打开
358 0.00000305 KaleidoscopeApp IOCTL_SERIAL_GET_PROPERTIES Serial4 SUCCESS
...406 0.02997366 KaleidoscopeApp IRP_MJ_CLEANUP Serial4 SUCCESS
407 0.03390231 KaleidoscopeApp IRP_MJ_CLOSE Serial4 SUCCESS
408 0.11443431 KaleidoscopeApp IRP_MJ_CREATE Serial4 SUCCESS Options: Open
409 0.00000727 KaleidoscopeApp IOCTL_SERIAL_GET_PROPERTIES Serial4 SUCCESS
...457 0.02995160 KaleidoscopeApp IRP_MJ_CLEANUP Serial4 SUCCESS
458 0.03389956 KaleidoscopeApp IRP_MJ_CLOSE Serial4 SUCCESS
459 0.11307261 devenv.exe IRP_MJ_CREATE Serial4 SUCCESS Options: Open
460 0.00000185 devenv.exe IOCTL_SERIAL_GET_PROPERTIES Serial4 SUCCESS
...501 35.55274341 devenv.exe IOCTL_SERIAL_WAIT_ON_MASK Serial4 取消
任何见解将不胜感激!