質問

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

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

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

役に立ちましたか?

解決

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

  • 良い方法は、他のアプリケーションを修正することです。または、それが不可能な場合、シリアルポートハードウェアドライバーの上に置かれ、複数の接続ポイント(1つによって使用されるもの)を公開するフィルターデバイスドライバー(parportドライバーに似ていますが、パラレルポートではなくシリアルポート用)を記述する基礎となる実際のドライバーに渡される他のアプリケーション、および独自のアプリケーションで使用される別の「バックドア」...実際のドライバーには1つのクライアントしか表示されません。つまり、フィルタードライバーはその上にあります)
  • 簡単な方法は、他のプロセスを破棄(強制終了)することです。

他のヒント

最近これに出会い、少し追加する必要があります...ほとんどのCOMポートドライバー"ロック解除"デバイスマネージャーでデバイスが有効または無効になっているときのポート。つまり、このタスクを実行する(C#)方法はソリューションで説明されています。

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

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

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

ポートを all リセットするということを言っているので、その例のライブラリを変更して、すべてのポートをループするように変更します。

// 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);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top