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

(区别在于:用.Net语言编写的ActiveX控件叫做.Net Applets吗?)

使用一个优于另一个是否有任何优势?

此外,Microsoft将此技术引用为什么? (在MSDN上搜索不会带来任何名为.Net Applets的内容!)

ps:从我可以看到的ActiveX控件需要COM注册,而.Net applets不。此外,在Web页面中,使用其CLSID引用activeX控件,而.NET applet似乎由全名(路径,DLL名称,名称空间和类)引用

有帮助吗?

解决方案

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

您也可以编写一些托管代码,并在IE中运行。工作方式是CLR注册 MIME过滤器安装时。然后,当IE看到你正在发送一些正确的mime类型时,它会将代码交给CLR来处理。 CLR对代码进行沙箱处理,使其仅被授予Internet权限,因此无法执行框架公开的所有操作。您必须检查特定文档,了解在此安全区域中可以执行和不可执行的操作。

一些权衡:

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

安全性:ActiveX控件只是在用户系统上运行的本机代码,因此理论上它们可以做任何他们想做的事情。在实践中,LoRIE在许多情况下限制它,你必须做一些特殊的外壳,如注册表和文件系统访问(参见了解并在保护模式下工作)。

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

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

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

其他提示

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top