3

SerialPort プログラムを書いています。SerialPort を開こうとすると、UnauthorizedAccessException がスローされ、COM1 へのアクセスが拒否されることがあります。これは、別のプログラム (他の誰かによって作成され、そのソースコードを持っていない) が COM1 を使用しており、そのプログラムが終了しても COM1 を閉じないためです。2 つの質問をしたい:

  1. 別のプログラムで使用されている場合、自分のコード (特に C# コード) で COM1 を閉じるにはどうすればよいですか?
  2. C# コードで COM1 を閉じることができない場合、Windows OS で COM1 を閉じたり解放したりするにはどうすればよいですか?

ありがとう。

4

2 に答える 2

6

このスタック オーバーフローの質問は最初のステップです: C# でプロセスごとに開いているファイル ハンドルのリストを取得するにはどうすればよいですか?

それができたら、そこのコードを変更してハンドルを閉じるか、ハンドルが開いているプロセスを単純に強制終了できます。

ただし、これは非常にリスクが高く*、問題が発生しやすく、特定の展開 (x32 対 x64 対 ARM) に加えて、その特定のマシンで「COM1」がマップされるものに基づいて再設計する必要があります。

危険: シリアル ポートが、たとえば電話などに新しいファームウェアをインストールするために使用されている場合、ポートを閉じると、デバイスがブリックする可能性があります。ポートがデータ転送に使用されている場合、ポートを閉じるとデータが失われる可能性があります。

幸運を。ただし、システムを破壊したり、データを失ったりしても、私を責めないでください。

于 2012-06-25T04:17:10.887 に答える
-2

呼び出すことにより、C#で通信ポートを閉じることができます

serialPort.Close();

ただし、COMM ポートは自分で開かないと閉じることができません。

アプリケーションを閉じるときに、通信ポートを閉じていることを確認してください。コードを配置していただければ、調査いたします。

于 2012-06-25T04:01:08.600 に答える