c# - 如果 NetFx40_LegacySecurityPolicy 为 true,Microsoft Pointofservice 无法初始化
问题描述
我看过很多关于这方面的报道,但所有的答案似乎都与我遇到的问题相反。我有一个大约在 2011 年编写的自定义 DLL;它驱动一组定制支付设备,并且多年来一直没有问题地运行(每天数千笔交易)。最近一个部门开始测试新的POS终端,这个dll现在在实验室里失败了。
该 dll 旨在作为 OPOS 或 POS.net 运行(取决于客户端应用程序)。运行 OPOS 时没有问题;无论设置它都可以正常工作。运行 POS.net 时,出现以下异常:
Public Function Open(ByRef DevName As String, UseEvent As Integer) As Integer
DIM MyPOSExplorer As New PosExplorer()
System.TypeinitializationException:“Microsoft.PointOfService.Management.Explorer”的类型初始化程序引发了异常。
内部异常
PosLibraryException:无法打开注册表项
现在,这就是让我感到困惑的地方。对于我在这个问题上看到的大多数答案,他们建议将以下内容添加到配置中:
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>
但是,如果设置为 true,则会出现上述故障。如果设置为false,则一切正常(对于 DLL 本身)。
所以,答案可能是,为什么不把它设置为 false 并收工呢?父应用程序(现成产品)要求将策略设置为 True。(运行应用程序时,False 将允许设备被认领,并成功读取 - 但是,最终应用程序会出现内部错误;当设置为 True 时,应用程序在加载支付设备时会崩溃)
DLL 针对 .Net 4.5;计算机系统运行 4.51 或更高版本。
我要确定的是,要寻找什么来理解为什么我的设置似乎需要与大多数建议的修复相反。也许这会引导我如何扭转这个问题。(如果我可以让 POS.net 使用 'True' 并以 'False' 失败,我会很高兴。这个 DLL 已被淘汰;并将在明年内退役)
解决方案
问题原来是一组运行 Microsoft.PointOfService.DLL 版本 1.12.xx 的机器。当一切都移到版本 1.14.1.0 时,问题就消失了。现在所有代码都按预期运行<NetFx40_LegacySecurityPolicy enabled="true"/>
。
推荐阅读
- http - 从 Jmeter 中的 xml 文件获取链接以发出 http 请求
- jquery - 更改 jQuery Mobile 页脚按钮的高度
- ios - 在 IB 中给 VC 分配一个类会导致黑屏
- c# - 我们如何知道 struct 是在 CPU 缓存上还是丢失到内存缓存中?
- angularjs - 如何将 ngForce 添加到我的 Angular 应用程序
- c# - 如何在 SQLite 中存储布尔值
- speech-recognition - Sphinxtrain 返回除 pocketsphinx 以外的其他结果
- airflow - 气流图视图未更新
- selenium - 可以根据本地主机地址运行 docker 映像吗?
- python - wxpython CallAfter 不改变 GUI