我正在尝试解决 VDI 解决方案中智能卡设备的 USB 重定向问题。 我正在使用 pyscard 模块作为智能卡。 对于进一步的上下文,主要问题是当浏览器插件调用用于处理智能卡的 python 脚本时,未检测到读卡器。
关于问题,当我从 CMD 解释器运行此代码片段时,我收到空列表,表示系统上未找到设备
CMD:
import smartcard.System print(smartcard.System.readers())
返回
[]
IDLE: 但是,当我从 IDLE 运行相同的代码时,它确实返回设备,表明它可以检测到它是所需的状态
import smartcard.System print(smartcard.System.readers())
返回一个包含一个条目的列表,智能卡读卡器的名称(用下面的占位符简化为设备名称无关)。
['device name']
为什么 IDLE 能够检测到设备,而通过 CMD 的 python 解释器却不能? 操作系统是 Windows Server 2022。
我尝试设置 PYTHONHOME 环境变量,并在 IDLE 和解释器中打印环境变量,以确保它们使用相同的路径。 IDLE 显示了更多路径,但 IDLE 和解释器都指向相同的 python 目录。
此外,检查了 IDLE 和解释器正在使用的 Python 版本,确认两个环境使用相同版本的 Python,即 Python3.11.9。
遇到的问题很可能是由于 CMD 和 IDLE 会话中的用户环境不同导致的。具体来说,USB 设备(如智能卡读卡器)的访问权限通常与用户及其权限相关联。
以下是可能导致 CMD 和 IDLE 行为差异的原因:
-
不同的用户帐户: 的 IDLE 会话可能以具有访问智能卡读卡器权限的用户身份运行,而的 CMD 会话可能以不同的用户身份运行,该用户可能没有必要的权限。
-
用户访问控制 (UAC): 即使使用的是同一个用户帐户,CMD 会话可能也以标准用户权限运行,而 IDLE 会话可能以提升的权限运行。这取决于如何启动 IDLE 和 CMD。
-
环境变量: 虽然已经检查了一些环境变量,但可能还有其他与 USB 设备或智能卡读卡器相关的特定变量在的 CMD 和 IDLE 环境中设置不同。
解决问题的方法:
- 检查用户权限:
- 确保在 CMD 和 IDLE 中使用的用户帐户相同。
-
验证该用户帐户是否具有访问智能卡读卡器的必要权限。可以在“设备管理器”>“智能卡读卡器”>“[的读卡器]”>“属性”>“安全”选项卡中检查。
-
以管理员身份运行 CMD: 尝试以管理员身份运行 CMD,看看是否能解决问题。右键单击 CMD 并选择“以管理员身份运行”。
-
比较环境变量: 更全面地比较 CMD 和 IDLE 会话中的所有环境变量。可以使用
print(os.environ)
打印所有环境变量。查找与 USB、智能卡或相关驱动程序相关的任何差异。 -
使用
procmon
分析: SysInternals 工具套件中的procmon
可以帮助分析应用程序(例如的 Python 脚本)如何与系统(包括 USB 设备)交互。运行procmon
并过滤与的 Python 进程和智能卡读卡器相关的事件,以查看是否存在任何访问被拒绝的错误或其他问题。 -
更新驱动程序: 确保的智能卡读卡器驱动程序是最新的。过时的驱动程序可能会导致兼容性问题。
通过系统地调查这些可能性,应该能够确定 CMD 和 IDLE 之间行为差异的原因,并找到解决问题的方案。
标签:python,windows,smartcard,pcsc,vdi From: 78786077