none
activex控件在win10 x64 ie11中运行不正常 RRS feed

  • 问题

  • 请教一下,我们开发的ActiveX(用COleControl)在win7 32位ie下运行正常,但是在win10 x64 ie下运行有问题,控件能够初始化成功,但功能不正常,调试控件无法进入断点,并且在输出中提示:

    “iexplore.exe”: 已加载“C:\Windows\System32\ELSCore.dll”,Cannot find or open the PDB file
    “iexplore.exe”: 已加载“C:\Windows\System32\elsTrans.dll”,Cannot find or open the PDB file
    “iexplore.exe”: 已卸载“C:\Windows\System32\elsTrans.dll”
    “iexplore.exe”: 已加载“C:\Windows\System32\elslad.dll”,Cannot find or open the PDB file
    “iexplore.exe”: 已加载“C:\Windows\System32\BCP47Langs.dll”,Cannot find or open the PDB file
    internal\onecorecom\inc\combase\comcataloghelpers.hpp(64)\ole32.dll!00007FFD8BF889C1: (caller: 00007FFD8C01E7B9) ReturnHr(2) tid(28ec) 80040154 没有注册类
    线程 'Win64 线程' (0x1c64) 已退出,返回值为 0 (0x0)。
    线程 'Win64 线程' (0x2b0c) 已退出,返回值为 0 (0x0)。
    线程 'Win64 线程' (0x2f7c) 已退出,返回值为 0 (0x0)。
    线程 'Win64 线程' (0x21c4) 已退出,返回值为 0 (0x0)。
    “iexplore.exe”: 已加载“C:\Windows\System32\slc.dll”,Cannot find or open the PDB file
    “iexplore.exe”: 已加载“C:\Windows\System32\sppc.dll”,Cannot find or open the PDB file
    “iexplore.exe”: 已卸载“C:\Windows\System32\sppc.dll”
    “iexplore.exe”: 已卸载“C:\Windows\System32\slc.dll”
    线程 'Win64 线程' (0x32f8) 已退出,返回值为 0 (0x0)。
    onecoreuap\shell\windows.storage\shelllnk.cpp(124)\windows.storage.dll!00007FFD894D0C2A: (caller: 00007FFD894D0B02) ReturnHr(10) tid(33bc) 80004002 不支持此接口
    onecoreuap\shell\windows.storage\shelllnk.cpp(124)\windows.storage.dll!00007FFD894D0C2A: (caller: 00007FFD894D0B02) ReturnHr(11) tid(33bc) 80004002 不支持此接口
    onecoreuap\shell\windows.storage\shelllnk.cpp(124)\windows.storage.dll!00007FFD894D0C2A: (caller: 00007FFD894D0B02) ReturnHr(12) tid(33bc) 80004002 不支持此接口

    2017年12月28日 3:03

全部回复

  • Hi,

    感谢在MSDN论坛发帖。

    >>请教一下,我们开发的ActiveX(用COleControl)在win7 32位ie下运行正常,但是在win10 x64 ie下运行有问题,控件能够初始化成功,但功能不正常,调试控件无法进入断点

    请问你开发的控件是32位还是64位?

    如果你开发的是32位的控件,建议你将平台选项设置为AnyCPU,并运行Syswow64目录下的32位IE。

    如果你开发的是64位的控件,建议你打开IE设置中的Enable 64-bit process for Enhanced Protected Mode和Enable Enhanced Protected Mode选项。

    希望对你有所帮助。

    Best Regards,

    Baron Bi


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年12月28日 7:11
  • 非常感谢您的解答!我开发的是32位控件,刚才我把属性--调试-工作目录    设置为控件所在目录(之前设置错了),控件运行时不再提示“没有此接口”等错误,但是还是无法进入调试断点。另外,就您说的用SysWOW64目录的32位IE,我查询网上说win10 64位操作系统统一了32位和64位IE,不再区分32位版本,不知道我说的对不对?
    2017年12月28日 9:36
  • 64位进程不能加载32位的控件。如果你的控件在64位IE进程中初始化成功,那么你的控件已经是64位版本。这也意味着Enable 64-bit process for Enhanced Protected Mode和Enable Enhanced Protected Mode这两个选项都是启用状态。

    EPM打开之后,IE标签页运行在appcontainer完整级别下,能够访问的资源极其有限。你的ActiveX需要注册CATID_AppContainerCompatible分类并且在需要的资源(例如另一个COM组件所在的DLL)访问不到的时候做对应处理。参考Supporting enhanced protected mode (EPM)


    Visual C++ MVP

    2018年1月10日 17:42
    版主

  • 感谢您的回复!64位Activex只能运行在x64操作系统的x64IE上?而且IE必须开启EPM,同时需要注册CATID_AppContainerCompatible.是这样吗?我看网上还有说需要设置注册表TabProcGrowth为0,是必须的吗?期待您的回复
    • 已编辑 大 江 2018年5月11日 15:27
    2018年5月11日 15:26
  • 64位Activex只能运行在64位的IE标签页进程中。32位Activex只能运行在32位的IE标签页进程中。

    32位操作系统上,或者64位操作系统上关闭了EPM的区域中,IE的标签页进程都是32位。

    64位操作系统对于Internet和受限站点区域默认启用EPM,这意味着ActiveX需要有64位版本并且注册CATID_AppContainerCompatible才可以运行。受信任站点默认是关闭EPM的,这意味着你也需要提供一个32位版本的ActiveX以避免用户把你的网站加入受信任站点区域之后ActiveX反而不能工作。

    TabProcGrowth设置为0之后,IE并不为标签页创建单独的进程,而是重用框架进程。在64位系统上框架进程也是64位,这意味着32位的ActiveX不能被加载。但是默认设置下Internet区域的EPM是打开的,你改不改TabProcGrowth都得提供64位的ActiveX版本。



    Visual C++ MVP

    2018年5月12日 0:29
    版主