2016-11-19 20 views
0

角度と電子も使用していますが、これはエラーです:ノードスマートカードでSCardConnectエラーが発生し、SCardConnectエラーが発生しました。切断後にSCardListReadersエラーが発生しました。

Error: SCardConnect error: 
SCardConnect error: The smart card cannot be accessed because of other connections outstanding. 
(0x8010000b) 

カードを最初にスキャンした後、エラーをスローしなくなり、再起動するまでカードを正しく読み込みません。ここでは、スマートカードに関連する私のコードの一部抜粋です:

const smartcard = require('smartcard'); 
const Devices = smartcard.Devices; 
const devices = new Devices(); 
let currentDevices = []; 

//something else 

app.run(function($rootScope) { 
let registerDevices = function (event) { 
    currentDevices = event.devices; 
    currentDevices.forEach(function (device) { 
     device.on('card-inserted', event => { 
      let card = event.card; 
      console.log(`Card '${card.getAtr()}' inserted into '${card.device}'`); 
      $rootScope.$broadcast('card-attach',card.getAtr()); 
     }); 
     device.on('card-removed', event => { 
     }); 
     device.on('error', event => { 
      console.error("Card Reader Error: " + event); 
     }); 
    }); 
}; 

devices.on('device-activated', event => { 
    console.log("Reader added :" + event.device); 
    registerDevices(event); 
}); 

devices.on('device-deactivated', event => { 
    console.log("Reader removed :" + event.device); 
    registerDevices(event); 
}); 
}); 

また、私はスキャナを切断するとき、それは

events.js:160 Uncaught Error: SCardListReaders error: The Smart Card Resource Manager is not running. 
(0x8010001d) 

events.js:163 Uncaught Error: Uncaught, unspecified "error" event. ([object Object]) 

を言うとスキャナは、再接続後に機能していません。

答えて

0

このエラーコードはE_SHARING_VIOLATIONです。一部のプロセスはすでに排他モードでカードに接続されています(SCardConnectの場合はSCARD_SHARE_EXCLUSIVEを使用)。


[Windowsであると仮定]:

デフォルトで自動的にすぐに挿入後、すべてのカードにアクセスし、そのための正しいドライバを決定しようと、WindowsのPlug&Playメカニズムがあります - A作成カードがアクセスされているときの短時間ウィンドウ(これはIMHOが最も原因です)。

は、次の2つの選択肢があります。

それに対処が
  1. - この特定のエラーコードのためのいくつかの時間後にカード接続の試み(数十ミリ秒の、YMMV)を再試行する(おそらくループ内で行うことができますいくつかの最大再試行回数)。

  2. を無効にし、この動作 - 二つの方法(私はグループポリシー1を使用したことがないが、それが動作するはずです)があります: - >管理

    /ローカルグループポリシー設定を使用して(コンピュータの構成を無効にするにはテンプレート - > Windowsコンポーネント - >スマートカード - >)スマートカードのプラグをオンにし、サービスを再生する(例えばhereを参照)

    B/64ビットシステム用(dword:0x00000000にレジストリHKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\ScPnP下キーEnableScPnPを設定することで、それを設定しますHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\ScPnPでも同様) - 例えばhere。 0x8010001D(E_NO_SERVICE)エラーコードを使用して編集については、読者を再接続する効果


変更を適用するには、システムを再起動してください - 私は考えています。

幸運を祈る!

+0

レジストリを変更して再起動し、初めて動作しました。しかし、私は再び同じエラーが発生したアプリを再起動した後... –

関連する問題