NPAPI插件开发学习:插件中多个dll文件的打包

利用NPAPI开发浏览器插件过程中,发现自己开发的插件调用了多个第三方dll动态库文件。起初按照火狐社区中的方法只在注册表中添加了自己开发的dll文件,未将第三方的dll文件进行注册,浏览器每次加载测试页面的时候,FireFox会出现死机,而且在任务管理器中可以发现有多个plugins-container.exe进程出现。于是在网络中搜索了有关dll打包整合以及NPAPI插件打包的相关资料。现整理如下(由于未找到原帖的出处,下文中的连接是本人转载的网址):

DLL的打包工具:ILMerge,参考:http://blog.163.com/ydm_helloworld/blog/static/1091924162009912155914/

NPAPI开发插件的打包,参考:http://www.xue5.com/WebDev/Site/694148.html

现将第二篇博文的内容转载下来,以备以后仔细学习:

我们开发好的插件需要交给用户使用的,我们自己在开发的过程中可能有各式各样的方法来使插件可以运行,但是如果要交给用户使用,我们总不至于让用户自己去写注册表,或者让用户将咱们的dll复制到plugins目录下吧!为了让用户的安装操作简单化,介绍两种方法:

按照扩展的方式将插件打包

这种方式根据浏览器不同需要采取不同的打包方式,比如Firefox需要打包为xpi,而chrome则需要打包为crx。可以参考: Chrome和Firefox的xpi与crx加载第三方dll 来进行。下面是简要描述一下过程:

打包为xpi

1、创建一个plugins文件夹以及install.rdf文件,如图所示: 


2、将插件的dll及dll依赖的其他模块全部放到plugins目录下(说明:对于简单的插件,一般就只有插件的dll,如果在插件中调用了其他dll,那么最好也将这些dll都放到这个plugins目录下)
3、填写install.rdf文件的内容,如下:
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
  <Description about="urn:mozilla:install-manifest">
    <em:id>[email protected]</em:id>
    <em:name>plugin name</em:name>
    <em:version>1.0</em:version>
    <em:targetApplication>
    <Description>
      <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
      <em:minVersion>4.0</em:minVersion>
      <em:maxVersion>19.0</em:maxVersion>
    </Description>
    </em:targetApplication>
    <em:unpack>true</em:unpack>
  </Description>
</RDF>
该文件中targetApplication中只需要修改minVersion和maxVersion,表示用于Firefox的版本范围。unpack一定要是true。其他值根据需要自行设置。该文件最好保存为UTF-8编码,如果文件中只有英文字符保存为ANSI也是可以的。
最后将plugins文件夹和install.rdf文件一起压缩为zip压缩包,然后将这个zip压缩包的后缀更改为xpi即可。

打包为crx

1、 创建一个文件夹,如:test。
2、 将需要打包的插件复制到刚才创建的文件夹中,同时在文件夹中创建一个文件manifest.json。
3、 在manifest.json中写入如下内容:
{
"manifest_version": 2,
"name": "demoplugin",
"version": "1.0.0",
"description": "demo plugin package for chrome",
"plugins": [
{ "path": "npdemo.dll", "public": true }
]
}

manifest_version的值不需要改变,其他各项根据需要进行修改,plugins项的path表示插件dll相对于该json文件的相对路径,public的值设置为true或者false皆可。Test文件夹中的内容:

4、 进行打包,打开chrome浏览器,点击浏览器导航栏右边的按钮。在弹出的菜单中选择工具->扩展程序,在打开的页面中勾选上开发者模式,如下图

点击载入正在开发的扩展程序,找到并选择我们刚才的文件夹test。加载成功之后显示如下

重新加载是为了在你修改了某些文件之后需要让chrome重新加载时使用的。
点击打包扩展程序,在弹出的界面中选择刚才的test文件夹,就可以将扩展程序进行打包了,打包之后就会在test文件夹相同目录下生成一个crx文件和一个pem文件,这个crx文件就是我们需要的,可以将这个crx文件发布给用户进行安装。

安装crx文件需要打开扩展程序页面,然后将crx文件拖放到扩展程序页面即可继续安装,xpi文件则只需要在Firefox运行时,拖动到浏览器窗口内就可以安装,不需要打开某个特定页面。

制作msi安装包

这种方式其实就是写注册表的方式,只不过由msi安装程序完成了写注册表的过程,用VS2010制作插件安装包的步骤如下:
1. 新建项目,选择安装和部署->安装项目。填写项目名称,如下图所示:

2. 项目创建之后自动显示文件系统页面,如下图所示:

假设我们要将插件dll默认安装到Program Files 文件夹下面的npapi_plugins文件夹中,首先在目标计算机上的文件系统上右键点击出现的菜单中选择添加特殊文件夹->Program Files 文件夹,然后在添加的Program Files 文件夹上右键点击选择添加->添加文件夹,将新添加的文件夹命名为npapi_plugins,如下图所示:

3. 选中我们新建的npapi_plugins文件夹,然后将插件拖放到这个文件夹中,或者点右键,选择添加->文件选择要添加的文件。在添加的文件上右键点击,选择属性,注意文件的Register设置为vsdrfDoNotRegister,我这里默认是这个值,如果不是这个值请修改为这个值。

4. 右键点击应用程序文件夹,选择属性窗口,在属性窗口中设置默认位置如下,记住应用程序文件夹的Property,后面有用:

5. 文件添加好了,接下来需要在注册表中注册插件,选择视图->编辑器->注册表,打开如下所示页面:

展开HKEY_LOCAL_MACHINE\Software点右键新建->键,命名为MozillaPlugins,然后在MozillaPlugins上点右键新建->键,命名为@demo.plugin.org(这个值可以随意命名,但大多都以@开头),如下所示:

6.在刚才新建的键上@demo.plugin.org点右键新建->字符串值,命名为Path,在Path上点右键选属性窗口,设置Path的值,如下图所示:

注意[TARGETDIR]为前面提到的应用程序文件夹的Property,[TARGETDIR]后面紧跟插件文件名,不需\。
6. 完成这些步骤,在项目上点击右键生成,即可在Debug目录下或者Release目录下找到我们需要的npapiSetup.msi,同时还有一个setup.exe(这个我们不需要它)。将msi文件发布给用户即可。

这只是制作安装npapi插件的最基本步骤,要做一个个性化的msi安装程序可能还需要更多的操作,就不进行深究了。


Author:zssure

Date:    2013-07-21

E-mail:[email protected]

你可能感兴趣的:(浏览器,chrome,插件,firefox,NPAPI)