.NET Applet和嵌入IE的ActiveX控件有什么区别?

4

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

(区别是:使用.Net语言编写的ActiveX控件被称为.Net小程序吗?)

使用其中之一是否有任何优势?

此外,微软如何引用这项技术?(在MSDN上搜索没有任何称为.Net小程序的结果!)

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

3个回答

7

ActiveX控件只是实现了IUnknown接口的COM对象。最近的IE版本还要求该对象实现IObjectSafety接口。为了实现有用的功能,该对象还需要实现一些其他的Ole接口,如IDispatch、IOleObject等。该对象需要通过CoCreateInstance()创建,这意味着您必须以某种方式将其注册到注册表中。您不必在标记中使用GUID,也可以使用AppId(如果注册了一个)。

你还可以编写一些托管代码,并在IE中运行。这是通过CLR在安装时注册MIME过滤器实现的。然后,当IE看到您发送了正确的MIME类型的内容时,它会将代码交给CLR处理。CLR确实会对代码进行沙箱处理,只授予Internet权限,因此它不能执行框架提供的所有操作。您需要查看特定文档以了解此安全区域中可以和不可以做什么。
一些权衡:
安装便捷性:ActiveX控件要求您将所有内容打包成一个.CAB文件,并使用相当难懂的.INI文件描述安装要求。如果您必须与模块一起安装其他依赖项(例如ATL / MFC dll或其他第三方模块),则会变得非常棘手。对于.NET模块,您只需以正确的MIME类型发送它即可,但您必须确保用户拥有正确版本的框架(您可以通过网站上的用户代理字符串进行检查)。

安全性:ActiveX控件只是在用户系统上运行的本机代码,因此理论上它们可以做任何想做的事情。在实践中,LoRIE在许多情况下都进行了限制,您必须对诸如注册表和文件系统访问等事物进行大量特殊处理(请参见理解和使用受保护模式)。

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

浏览器对象:如果您想在托管扩展中使用IE / Shell对象,则大多数情况下必须自己编写interop,因为框架没有很好地将这些接口封装在托管对象中。请参见http://pinvoke.net以获得一些帮助。

兼容性:在同一进程中托管不同版本的运行时存在问题。直到最近,这根本不可能,但我认为随着3.x版本的推出,这已经开始变得可能了。总之,如果您针对.net 2.0,而其他人已经加载了.net 1.0作为其浏览器扩展的一部分,那么您将失去机会。一般来说,IE和Windows Shell不支持托管扩展。这个.net应用程序MIME过滤器可能是一个值得注意的例外,但请注意可能存在潜在问题。


低权限 IE。它是在 IE7+ 中运行 IE 的低完整性进程的东西,而不是默认的完整性级别。也称为“受保护模式 IE”。请参见http://msdn.microsoft.com/en-us/library/bb250462.aspx。 - i_am_jorf

1
"

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

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

创建.NET公共语言运行时的主机

"

0

ActiveX控件与.NET小程序不具有相同的安全限制,这可能是优势或劣势,具体取决于您想要做什么。一般来说,.NET小程序更容易开发,而ActiveX需要使用VB6或C++创建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接