Visual Studio を使用して C#/WPF アプリケーションを開発しています。このアプリは COM ポートを使用し、終了時に解放します。デバッガーを使用して、このアプリケーションを頻繁に実行および停止しています。デバッグ セッションを開始すると、com ポートが既に使用されているという例外が発生することがあります。
このコードは、終了時に開いている com ポートを常に閉じるため、portmon を実行して、誰がポートを保持しているかを確認しました。「通常の」ケースでは、ポートは私のアプリケーション (portmon で KaleidoscopeApp を処理) によって取得され、使用され、閉じられます。ポートが解放されていない場合、そのポートは Visual Studio 自体であるプロセス "devenv" によって使用されています。
これらの場合、devenv が com ポートの所有者であるのはなぜですか? アプリを閉じると、アプリが保持され続けるのはなぜですか? ポートがリリースされるのは、Visual Studio を閉じたときだけです。特に Visual Studio 内でデバッガーが停止しているため、これは奇妙な動作です。
これは、com ポートへのアクセスを示す portmon からのキャプチャです。一般的なセッションが 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 成功
407 0.03390231 KaleidoscopeApp IRP_MJ_CLOSE Serial4 成功
408 0.11443431 KaleidoscopeApp IRP_MJ_CREATE Serial4
成功457 0.02995160 KaleidoscopeApp IRP_MJ_CLEANUP Serial4 成功
458 0.03389956 KaleidoscopeApp IRP_MJ_CLOSE Serial4 成功
459 0.11307261 devenv.exe IRP_MJ_CREATE Serial4 成功 オプション: 開く
460 0.0000CC0185
devenvIAL.exe501 35.55274341 devenv.exe IOCTL_SERIAL_WAIT_ON_MASK Serial4 CANCELED
どんな洞察もいただければ幸いです!