none
USBシリアル接続が、機器を取り外した後、ドライバー使用中として残り、アンインストールできない RRS feed

  • 質問

  • 複数のUSBシリアルデバイスを接続すると、各々のCOMポートが与えられ、増えていきます。 通常はアプリケーションでは1ポートしか使用しませんので、アプリケーションの終了時に、このCOMポートを切り離したいのですが、USBケーブルを外しても、ドライバーリスト上使用中となっています。 (COMの詳細設定で確認)  何かリリースをする方法(Scriptの実行等)はないでしょうか? よろしくお願いします。

    2015年5月21日 11:04

回答

  • COM ポートをオープンしたアプリが、COM ポート ハンドルを適切なタイミングでクローズしていないからだと思います。

    アプリがきちんと COM ポート ハンドルをクローズしてるか、確認してみては?

    • 回答の候補に設定 星 睦美 2015年5月25日 4:53
    • 回答としてマーク 星 睦美 2015年6月1日 4:55
    2015年5月21日 11:11
  • すでにできてしまったポートはHKLM\SYSTEM\CurrentControlSet\Control\COM Name Arbiter\ComDBにビットフラグで登録されているので、このフラグを0にすれば未使用に戻せます。
    HKLM以下に書き込みするには管理者権限がいるので、通常はアプリケーションから削除するといったことはしない方がいいです。

    GlobalDisableSerNumGenやIgnoreHWSerNumをキーワードにしてネット検索するとポートを増やさない方法を見つけられます。
    こちらもHKLM\SYSTEM\CurrentControlSet\Control\UsbFlags\に設定を書き込むことになるので管理者権限が必要です。
    #ただしこの方法では、ホストコントローラーのドライバがUSB3.0のポートだと効果が無かったりもします。

    USBシリアル変換ケーブルなどは、同じケーブルを指せば同じCOMポートになった方が便利だからなのか、ポートが割り当てられたままになります。
    同じUSBポートに挿しても、USB-シリアルのチップに書き込まれているPIDとVIDとシリアル番号が異なると、異なるCOMポートに割り当てる動作をするので、同一にしておくことで増えなくすることもできます。
    #某F社のチップを使っているとメーカー提供のツールでPID,VID,シリアルをいじれたり


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答の候補に設定 星 睦美 2015年5月25日 4:52
    • 回答としてマーク 星 睦美 2015年6月1日 4:55
    2015年5月21日 12:12

すべての返信

  • COM ポートをオープンしたアプリが、COM ポート ハンドルを適切なタイミングでクローズしていないからだと思います。

    アプリがきちんと COM ポート ハンドルをクローズしてるか、確認してみては?

    • 回答の候補に設定 星 睦美 2015年5月25日 4:53
    • 回答としてマーク 星 睦美 2015年6月1日 4:55
    2015年5月21日 11:11
  • すでにできてしまったポートはHKLM\SYSTEM\CurrentControlSet\Control\COM Name Arbiter\ComDBにビットフラグで登録されているので、このフラグを0にすれば未使用に戻せます。
    HKLM以下に書き込みするには管理者権限がいるので、通常はアプリケーションから削除するといったことはしない方がいいです。

    GlobalDisableSerNumGenやIgnoreHWSerNumをキーワードにしてネット検索するとポートを増やさない方法を見つけられます。
    こちらもHKLM\SYSTEM\CurrentControlSet\Control\UsbFlags\に設定を書き込むことになるので管理者権限が必要です。
    #ただしこの方法では、ホストコントローラーのドライバがUSB3.0のポートだと効果が無かったりもします。

    USBシリアル変換ケーブルなどは、同じケーブルを指せば同じCOMポートになった方が便利だからなのか、ポートが割り当てられたままになります。
    同じUSBポートに挿しても、USB-シリアルのチップに書き込まれているPIDとVIDとシリアル番号が異なると、異なるCOMポートに割り当てる動作をするので、同一にしておくことで増えなくすることもできます。
    #某F社のチップを使っているとメーカー提供のツールでPID,VID,シリアルをいじれたり


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答の候補に設定 星 睦美 2015年5月25日 4:52
    • 回答としてマーク 星 睦美 2015年6月1日 4:55
    2015年5月21日 12:12
  • COMポートをデバイスマネージャーから削除、してから、USBケーブルを外せば問題ないのですか、繋がった状態で、USBケーブルを外した場合の対応を、PCのアプリケーションを操作することのみできる操作員に、デバイスマネージャーを操作するを教育しても完全には対応できないのが現状です。 そこで、コマンドラインからの簡単な操作で、COM関連の情報をオンボードデバイス以外初期状態にする方法を探していた次第です。 ご回答ありがとうございました。
    2015年5月21日 13:03
  • ご回答ありがとうございます。諸所テストしてみましたが、旧来からやられているれレジストリーの変更、エクスポートを行い、xxx.regを実行しHKLM\SYSTEM\CurrentControlSet\Control\COM Name Arbiter\ComDBを上書きする方法が、簡単の様です。(例)デスクトップにHKLM\SYSTEM\CurrentControlSet\Control\COM Name Arbiter\ComDBのエクスポートファイルを置き、ダブルクリックでレジストリーへの追加が簡単のようです。 まだ2デバイス(同じもの)のテストのみですが、台数を増やして確認してみます。 アプリケーション上、1つのCOMポートの使用のみですが、見た目同じのデバイスを100台程とっかえひっかえ接続するための悩みでした。 

    2015年5月21日 13:22