代码之家  ›  专栏  ›  技术社区  ›  Ori Pessach

有没有办法强制IE卸载ActiveX控件?

  •  13
  • Ori Pessach  · 技术社区  · 15 年前

    <OBJECT> 用于实例化ActiveX控件的标记。然后,用户可以导航到另一个页面,该页面包含 <对象> 标记,该标记指向ActiveX控件的较新版本。

    在普通容器中,我只需在尝试升级之前卸载ActiveX。有没有办法强迫IE这么做?浏览一个不使用控件的页面是可以接受的,如果这样做可以奏效的话。

    需要ActiveX本身执行某些操作的解决方案无法正常工作,因为问题是当IE开始安装新版本的ActiveX时,ActiveX仍在内存中。我想做的是在IE启动该进程时,不要在内存中使用ActiveX,所以很明显,我不能依赖ActiveX控件本身的任何东西。

    8 回复  |  直到 15 年前
        1
  •  7
  •   chakrit Dutchie432    15 年前

    请尝试javascript delete语句:

    function unloadObject(objId) {
    
        var obj = document.getElementById(objId);
    
        obj.parentNode.removeChild(obj);
    
        delete obj;
    }
    

    呼叫 unloadObject(targetActiveXTagId) 在打开第二页之前。

    理想情况下,您应该将升级机制构建到ActiveX本身中。我见过一些在线游戏平台这样做,效果很好。

        2
  •  2
  •   user166390 user166390    15 年前

    我只能在 全部的 其中包括:

    1. 不同的CLSID(也是动态生成的——就像一个符咒一样工作)
    2. 不同的DLL名称(通过复制源文件)。文件并使用程序集版本(这避免了DLL在使用中的访问错误)

    我依赖于.NET/mscoree.dll来处理COM内容,因此可能会有一种更干净的方法进入较低的级别。

    不同的“版本控制”通过HKCU\Software\Classes结构中的临时加载进行处理。

        3
  •  1
  •   NinethSense    15 年前

    我认为这是不可能的。

        4
  •  0
  •   i_am_jorf    15 年前

    您可以尝试的一件事是让安装程序调用 CoFreeUnusedLibraries() 然后用S_OK in回复 DllCanUnloadNow()

    你也可以只写一个存根DLL来实现你所有的触摸IE的接口,然后就可以直接进入你的应用程序 真实的

        5
  •  0
  •   LarryF    15 年前

    您是否尝试过使用Javascript杀死ActiveX控件所在的DOM元素?如果您这样做,IE将告诉控件卸载,但您必须确保控件实际上将卸载。然后,您应该能够使用较新的对象引用点击页面,这将启动较新的对象。。。。

    否则,您可能会尝试打开一个弹出窗口,将您指向从未加载对象的页面,同时,使用主浏览器的命名引用,将其重定向到未引用对象的页面,使其有机会卸载,然后重新引用更新的ActiveX。这将加载更新的控件。

    无论你走哪条路,这都是一个棘手的问题,但你也许能让它做你想做的事。

    如果您的控件行为不正常,它可能无法正常卸载,因此这是您必须注意的事项。

    拉里

        6
  •  0
  •   laktak    15 年前

    你不能改变工作流程吗?首先检查更新,避免整个问题!

    无论您实施何种解决方案,浏览器都由客户端控制,任何(安全)更新或新版本都可能破坏您的系统。

        7
  •  -1
  •   Adam A    15 年前

    愚蠢的回答,对不起。我猜如果你还有这个问题,重定向就不起作用了。如果您没有尝试tho,只需创建一个页面,重定向到您更新的ActiveX页面并链接到该页面即可。

    middleman.html:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title>blank page</title>
    <meta http-equiv="REFRESH" content="0;url=http://www.newactivexcontrol.com"></HEAD>
    <BODY>
    </BODY>
    </HTML>
    
        8
  •  -1
  •   jerebear    15 年前

    显然是和不是。

    这可能发生,但只有通过安全漏洞“黑客”才能发生。所以不是通过任何合法的程序,不是。

    http://www.juniper.net/security/auto/vulnerabilities/vuln16409.html

    http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q240797&sd=tech

    这是来自MSDN网站的关于ActiveX控件的引用:

    用户不能直接与小程序、嵌入或对象元素加载的Microsoft ActiveX控件交互。用户可以在激活其用户界面后与此类控件交互。” http://msdn.microsoft.com/en-us/library/ms537508.aspx