技术开发 频道

Silverlight 4实例分析:从原理看架构

  那么,在浏览器中的插件是怎么注册上去的呢? 让我们来看看注册表。

  IE的插件:

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{32C73088-76AE-40F7-AC40-81F62CB2C1DA}

  HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{DFEAF541-F3E1-4c24-ACAC-99C30715084A}

  HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{DFEAF541-F3E1-4c24-ACAC-99C30715084A}\InprocServer32

  其键值是: c:\Program Files\Microsoft Silverlight\4.0.50826.0\npctrl.dll

  Firefox的插件:

  HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@Microsoft.com/NpCtrl,version=1.0

  Path=c:\Program Files\Microsoft Silverlight\4.0.50826.0\npctrl.dll

  ProgId: AgControl.AgControl.4.0

  增加的MIME类型:

  MIME: application/x-silverlight

  MIME: application/x-silverlight-2

  Silverlight如何工作?

  Silverlight是以宿主浏览器为基础环境的。npctrl.dll作为插件直接与宿主浏览器接口。npctrl.dll本身是个ActiveX控件,可以供我们调用。npctrl.dll会调用agcore.dll来处理一些非托管的API, 也会调用coreclr.dll来创建一个CLR。我们编写的Silverlight应用程序是运行在coreclr.dll创建的CLR当中的。这个图可以很好地帮你理解:

1

图3

  注:

  npctrl.dll: Silverlight plug-in

  agcore.dll and coreclr.dll : Core services

  CLR execution engine 和相关的AppDomain都是由coreclr.dll搭建的。我们的Silverlight程序运行在其中。

  Silverlight Runtime

  有一些文章提到了Silverlight Runtime这个术语。指的就是在用户机器上安装的用来运行Silverlight程序的环境。这篇文章提到的内容都是关于Silverlight runtime的。我们可以再多看看C:\Program Files\Microsoft Silverlight\4.0.50826.0目录下的文件。比如BCL所在的mscorlib.dll,注意到其大小没有,它比通常的Desktop安装,即普通的.net framework安装的mscorlib.dll小了不少。还有System.Windows.dll也是。我们可以查看一下其中的类型。其类型与普通的.net framework的System.Windows.dll差别挺大。

  结束语

  到目前为止,我们只看到了一点点MSDN上没有讲的东西。还有很多东西有待我们去发掘。

0
相关文章