3

別のアプリケーションの後に動作する必要があるアプリケーションがあります。この 2 番目のアプリケーションには、特定の状況で COM ポートが閉じられないというバグがあります。

アプリケーションでプログラムによってすべての COM ポートを閉じて、ポートを閉じることに関するバグが報告されないようにしたいと考えています。COM ポートを開いたオブジェクトを所有していない場合は可能ですか?

.NET Framework、C# のソリューションが必要です。

4

2 に答える 2

6

良い、簡単な方法はありません:

  • 良い方法は、他のアプリケーションを修正することです。または、それが不可能な場合は、シリアルポートハードウェアドライバーの上に配置され、複数の接続ポイント(基になる実際のドライバーに渡される他のアプリケーション、および独自のアプリケーションによって使用される別の「バックドア」...実際のドライバーは1つのクライアントのみを認識します。つまり、その上にあるフィルタードライバー)
  • 簡単な方法は、他のプロセスを無効にする(強制的に終了する)ことです。
于 2009-01-13T15:53:59.473 に答える
0

最近これに遭遇し、少し追加する必要があります...ほとんどのCOMポートドライバーは、デバイスマネージャーでデバイスが有効および無効になっているときにポートを「ロック解除」します。これは、このタスクを達成する (C#) 方法がソリューションで説明されていることを意味します。

プログラムでデバイスを有効/無効にする Win32 API 関数

COM ポートにそのソリューションを使用するために知っておく必要がある情報は次のとおりです。

  1. COM ポートの GUID: {4d36e978-e325-11ce-bfc1-08002be10318} (CLSID_Ports)
  2. リセットしたいポートの「インスタンスパス」

すべてのポートをリセットしたいと言っているので、その例のライブラリを変更して、次のように変更してすべてのポートをループする必要があります。

// Find the index of our instance. i.e. the touchpad mouse - I have 3 mice attached...
int index = GetIndexOfInstance(diSetHandle, diData, instanceId);
// Disable...
EnableDevice(diSetHandle, diData[index], enable);

このようなものに:

for (int index = 0; index < diData.Length; index++)
{
    EnableDevice(diSetHandle, diData[index], enable);
}
于 2017-08-04T15:38:52.353 に答える