为什么特定 Windows 10 映像上的 Internet Explorer 11 会阻止“Microsoft 数据和时间选择器控件 6.0 (SP6)”ActiveX 控件?

为什么特定 Windows 10 映像上的 Internet Explorer 11 会阻止“Microsoft 数据和时间选择器控件 6.0 (SP6)”ActiveX 控件?

一位客户正在将虚拟 Windows 工作站 (VDI) 从 Windows 7 升级到 Windows 10 x64。他们正在使用一个较旧的应用程序,即带有 Web 客户端的工作流产品,它在 Internet Explorer 中运行,并且仍然使用“Microsoft 数据和时间选择器控件 6.0 (SP6)”(32 位 ActiveX 控件)。

mscomct2.ocx 已被复制到 C:\Windows\SysWOW64 目录并使用“regsvr32 mscomct2.ocx”注册。

问题是,此控件不会在新 Windows 10 x64 映像上的 Internet Explorer(x86)中显示自己;事实上,该控件显示一个占位符并且被阻止(IE 处于兼容性视图中)。

IE 控件被阻止

工具/管理加载项确实在列表中显示了控件名称。双击该项目会显示“更多信息”,其中显示“阻止计数”为 17,而“使用计数”为 0。

有关 Microsoft 数据和时间选择器控件 6.0 (SP6) 的“更多信息”

好的,控制不知怎么被阻止了。有关测试设置的更多详细信息,请参阅下文。

现在,我听到你在想,为什么不用 HTML 原生控件替换该控件呢?好吧,替换控件需要重新发布工作流模板并更改所有工作流实例……

好的,在客户 Windows 10 映像的 VM 副本中,这是尝试显示选择器控件的网页。

    <html>
    <head>
    <title>DTPicker_Test</title>
    </head>
    <body bgcolor="#FFFFFF">
    function DocWrite(strHTML)
    {
    document.write(strHTML);
    }
    </script>

    <b>clsid:20DD1B9E-87C4-11D1-8BE3-0000F8754DA1</b>

    <script language="javascript">
    DocWrite("<object   classid=\"clsid:20DD1B9E-87C4-11D1-8BE3-0000F8754DA1\"  name=\"DTPicker\"   ID=\"DTPicker\" tabindex=\"1\"  accesskey=\"\"  mayscript=\"true\"  onload=\"DTPicker_InitProps()\" style=\"        position:absolute;      left:10;        top:100;        width:300;      height:100;     z-index:0;      color:#000000;      font-family:Arial;      font-style:normal;      font-weight:bold;       font-size:10pt; \"> <param name=\"MousePointer\" value=\"0\">   <param name=\"Enabled\" value=\"1\">    <param name=\"OLEDropMode\" value=\"0\">    <param name=\"CalendarBackColor\" value=\"-2147483643\">    <param name=\"CalendarForeColor\" value=\"-2147483630\">    <param name=\"CalendarTitleBackColor\" value=\"-2147483633\">   <param name=\"CalendarTitleForeColor\" value=\"-2147483630\">   <param name=\"CalendarTrailingForeColor\" value=\"-2147483631\">    <param name=\"CheckBox\" value=\"0\">   <param name=\"CustomFormat\" value=\"\">    <param name=\"Format\" value=\"1\"> <param name=\"UpDown\" value=\"0\"> <param name=\"MaxDate\" value=\"2958465\">  <param name=\"MinDate\" value=\"41640\"></object>");
    </script>

    <script language="javascript">
    function DTPicker_InitProps()
    {
    alert("init");
    }
    </script>

    </body>
    </html>

在我自己的 Windows 10 x64 笔记本电脑上,当我将 OCX 复制到 C:\Windows\SysWOW64,注册它并在 Internet Explorer 中打开完全相同的页面时,该控件确实会显示出来。

现在,为什么客户的 Windows 10 映像中的 Internet Explorer 会阻止此控件?页面区域为 Internet;在区域的自定义安全级别中,我已将所有“ActiveX 控件和插件”相关项目更改为:

  • 如果该项目有“启用”和“禁用”选项,那么我设置“启用”
  • 如果该项目有“启用”、“禁用”和“提示”,那么我设置“提示”
  • “允许 ActiveX 筛选”设置为“禁用”
  • “在 ActiveX 控件上运行反恶意软件”设置为“禁用”

当我在 Internet Explorer 中加载该页面时,系统询问“是否允许运行 ActiveX 控件和插件等软件?”,我回答是。但控件仍然没有显示出来。控件已被阻止。

有人知道在 Win10 图像上要检查什么或有解决方案吗?

同事Tim: 我正在与我尊敬的同事 Victor 一起研究这个问题。还有一个额外的重要发现是,这个特定的 ActiveX 控件“mscomct2.ocx”在 MS Office 365 (x86) 中运行良好(可以通过“开发人员选项卡”-->“控件”部分 -->“ActiveX 控件”-->“更多控件”-->“Microsoft 数据和时间选择器控件 6.0 (SP6)”启动),而 IE x86 阻止了该控件。很奇怪吧?

Office x86 中的更多控件选择屏幕

底层 VBA 参考

控件在 Office x86 中整齐运行

我们还为 IE 中的 ActiveX 组件启用了 VersionAuditLog,但它说它没有阻止该控件。

版本审计日志

感谢您对如何进一步解决问题的任何建议,因为我们在这里陷入了困境。

编辑 添加了同事 Tim 的贡献。

答案1

我来回答我自己的问题。在与一位非常专注的阴谋家合作并进行了大量排除后,我们找到了罪魁祸首:ActiveX 许可注册表项

看起来下一个注册表项启用了 Internet Explorer 中的日期和时间选择器:

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Licenses\4F86BADF-9F77-11d1-B1B7-0000F8753F5D] ""="iplpwpnippopupiivjrioppisjsjlpiiokuj"

我们是如何找到它的?我之前注意到,当我安装带有一些工作负载(“ASP.Net 和 Web 开发”)的 Visual Studio 2019 社区版时,控件开始工作。当我删除它时,它停止工作。在选择和取消选择单个 VS 组件进行安装的大量尝试和失败之后,Nuget 包管理器似乎起了作用。删除已安装的 DLL 不起作用;删除新安装的注册表项起作用了。

供参考:更多Microsoft Common Controls ActiveX许可证注册表项: https://github.com/yangshengcheng/bhm/blob/master/policy/msgforward/vb6controls.reg

相关内容