我也在使用 angular 和 electron,但之前一切正常。这是错误:
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])
并且扫描仪在重新连接后不工作。
最佳答案
这个错误代码是E_SHARING_VIOLATION -- 某些进程已经以独占模式连接到卡(使用 SCARD_SHARE_EXCLUSIVE 代替 SCardConnect)。
[假设您在 Windows 下]:
有一个Plug&Play Windows 中的机制默认情况下在插入后立即自动访问每张卡并尝试为其确定正确的驱动程序 - 这会在访问卡时创建一个短时间窗口(恕我直言,这是最可能的原因)。
你有两个选择:
处理它 -- 在一段时间(几十毫秒,YMMV)后针对这个特定的错误代码重试卡连接尝试(可能可以在循环中完成一些最大重试次数) ).
禁用此行为 - 有两种方法(我从未使用过组策略,但它应该有效):
a/使用本地组策略设置(禁用计算机配置 -> 管理模板 -> Windows 组件 -> 智能卡 -> 打开智能卡即插即用服务)(参见例如 here)
b/通过将
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\ScPnP
下的注册表项EnableScPnP
设置为dword:0x00000000
(对于64 位系统也将其设置在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\ScPnP
下)——参见例如here .请务必重新启动系统以使更改生效
关于您使用 0x8010001D ( E_NO_SERVICE) 错误代码进行的编辑以及重新连接阅读器——我不知道。
祝你好运!
关于javascript - Node 智能卡在扫描卡时抛出 SCardConnect 错误,断开连接后抛出 SCardListReaders 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40697650/