2016-11-19 8 views
0

我也使用角和电子,但一切工作正常以前。这是错误:节点智能卡丢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 - 某些进程已经以独占模式连接到卡(使用SCARD_SHARE_EXCLUSIVE代替SCardConnect)。


[假设你是在Windows下]:

有一个Plug&Play机制在Windows中的默认情况下插入后自动访问每个卡,并试图确定正确的驱动程序 - 它创建了一个访问卡片时的短时间窗口(这是恕我直言最可能的原因)。

你有两个选择:

  1. 对付它 - 重试此特定错误代码一段时间后,该卡连接尝试(MS几十,因人而异)(可能可以在循环中完成有一些最大重试次数)。

  2. 禁用此行为 - 有两种方法(我从来没有使用组策略之一,但它应该工作):

    A /使用本地组策略设置(禁用计算机配置 - >管理模板 - > Windows组件 - >智能卡 - >打开智能卡即插即用服务)(见例如here

    b /设置HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\ScPnPdword:0x00000000注册表项EnableScPnP(对于64位系统设置同样在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\ScPnP之下) - 参见例如here。一定要重新启动系统,以使更改生效


关于与0x8010001D(E_NO_SERVICE)错误代码的编辑和重新连接读者 - 我不知道。

祝你好运!

+0

我改变了注册表并重新启动,它第一次工作。但是,我重新启动应用程序后,又发生了同样的错误... –