Я занимаюсь разработкой приложения на C # / WPF с использованием Visual Studio.Это приложение использует COM-порт, а затем освобождает его при выходе.Я использую отладчик для запуска и остановки этого приложения часто.Иногда я получаю исключение при запуске сеанса отладки, говорящего о том, что com-порт уже используется.
Код всегда закрывает открытый com-порт при выходе, поэтому я запустил portmon, чтобы увидеть, кто удерживаетпорт.Оказывается, что в «нормальных» случаях порт захватывается, используется и закрывается моим приложением (Process KaleidoscopeApp в portmon).В случае, когда порт не освобожден, порт используется процессом "devenv", который является самой Visual Studio.
Почему в этих случаях 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 * 101 * *2 * 2 * Ser441014 * 406 0,02997366 KaleidoscopeApp IRP_MJ_CLEANUP Serial4 УСПЕХ
407 0,03390231 KaleidoscopeApp IRP_MJ_CLOSE Serial4 УСПЕХ
408 0,11443431 KaleidoscopeApp IRP_MJ_CREATE Serial4 SUCCESS Опции: Открыть
409 0,00000727 KaleidoscopeApp IOCTL_SERIAL_GET_PROPERTIES Serial4 УСПЕХ
...
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 SUCE 10 * * * * 0 * * * * * * * 0 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 050_50 * * * * * Необязательный.1026 * 501 35.55274341 devenv.exe IOCTL_SERIAL_WAIT_ON_MASK Serial4 CANCELED
Любое понимание будет оценено!