【问题标题】:What is the difference between a .NET Applet and ActiveX control embedded in IE.NET Applet 和 IE 中嵌入的 ActiveX 控件有什么区别
【发布时间】:2009-05-02 00:02:53
【问题描述】:

我在网上看到了一些关于 .Net 小程序的文章,我想知道它与 activex 控件(使用 .Net 语言创建)有何不同? (澄清一下,这是关于在网络浏览器中运行的小程序)

(有区别吗:用.Net语言编写的ActiveX控件称为.Net Applets?)

使用一个比另一个有什么优势吗?

另外,Microsoft 将这项技术称为什么? (在 MSDN 上搜索并没有找到任何称为 .Net Applets 的东西!)

ps:据我所知,ActiveX 控件需要进行 COM 注册,而 .Net 小程序则不需要。此外,在网页中,activeX 控件是使用其 CLSID 引用的,而 .NET 小程序似乎是通过全名(路径、dll 名称、命名空间和类)引用的

【问题讨论】:

    标签: .net internet-explorer activex applet


    【解决方案1】:

    ActiveX 控件只是简单的 COM 对象,它们至少实现了 IUnknown。最新版本的 IE 也开始要求对象实现 IObjectSafety。为了做任何有用的事情,该对象还需要实现一些其他 Ole 接口,例如 IDispatch、IOleObject 等。该对象需要通过 CoCreateInstance() 进行创建,这意味着您必须以某种方式使用 register 它注册表。您不必在标签中使用 guid,如果您注册一个,也可以使用AppId

    您还可以编写一些托管代码并使其在 IE 中运行。工作方式是 CLR 在安装时注册一个MIME filter。然后,当 IE 看​​到您正在发送适当的 mime 类型的内容时,它会将代码交给 CLR 处理。 CLR 将代码沙箱化到仅授予 Internet 权限的范围内,因此它不能执行框架公开的所有操作。您必须查看特定文档,了解在此安全区域中可以做什么和不可以做什么。

    一些取舍:

    易于安装:ActiveX 控件要求您将所有内容打包成一个带有 .INI 文件的 .CAB 文件,该文件以相当隐晦的方式描述了安装要求。如果您必须为您的模块(例如 ATL/MFC dll 或其他第三方模块)安装额外的依赖项,它会变得非常棘手。使用 .net 模块,您只需使用正确的 MIME 类型发送它,但您必须确保您的用户拥有正确的框架版本(您可以通过网站上的用户代理字符串检查)。

    安全性:ActiveX 控件只是在用户系统上运行的本机代码,因此理论上它们可以为所欲为。在实践中,LoRIE 在很多情况下都会对其进行限制,您必须对注册表和文件系统访问等进行大量特殊处理(请参阅Understanding and Working in Protected Mode)。

    线程:由于 ActiveX 控件在浏览器 UI 线程上运行,因此您必须确保不会在该线程上执行长时间阻塞操作,因此您必须自己进行线程处理。如果您的长阻塞操作操作 DOM,您必须自己编组 IHTMLxxx 接口,使用 the GIT 或 COM Marshalling functions。我不确定 .net 小程序是否在浏览器 UI 线程上运行,但我确定在 C# 中更容易处理。

    浏览器对象:如果您想在托管扩展中使用 IE/Shell 对象,则大多数时候您必须自己编写互操作,因为框架不能很好地将这些接口包装在托管对象中。请参阅http://pinvoke.net 以获得一些入门帮助。

    兼容性:在同一进程中托管不同版本的运行时存在问题。直到最近,这根本不可能,但我认为在 3.x 版本中,它已经开始在一定程度上成为可能。结果是,如果您以 .net 2.0 为目标,而其他人已经将 .net 1.0 作为其浏览器扩展的一部分加载,那么您就输了。通常 IE 和 Windows Shell 不支持托管扩展。这个 .net 应用程序 MIME 过滤器可能是一个明显的例外,但请注意可能存在潜在问题。

    【讨论】:

    【解决方案2】:

    “ActiveX 控件(使用 .Net 语言创建)”和“.NET 小程序”都是“IE 中托管的 .NET 程序集”的俚语。

    事实上,.NET 程序集可以托管在各种应用程序中。见:

    Creating a Host to the .NET Common Language Runtime

    【讨论】:

      【解决方案3】:

      ActiveX 控件没有与 .NET 小程序相同的安全限制,这可能是优势或劣势,具体取决于您要执行的操作。 .NET 小程序通常更容易开发,ActiveX 您使用 VB6 或 C++ 创建。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-05
        • 2010-12-18
        • 2018-10-13
        • 2019-10-21
        • 2020-09-28
        • 2018-08-17
        • 1970-01-01
        • 2011-02-13
        相关资源
        最近更新 更多