首页 > 解决方案 > 如果 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 已被淘汰;并将在明年内退役)

标签: c#.netvb.netdllpos

解决方案


问题原来是一组运行 Microsoft.PointOfService.DLL 版本 1.12.xx 的机器。当一切都移到版本 1.14.1.0 时,问题就消失了。现在所有代码都按预期运行<NetFx40_LegacySecurityPolicy enabled="true"/>


推荐阅读