一种加载插件的方法及装置的制作方法

文档序号:6582611阅读:152来源:国知局
专利名称:一种加载插件的方法及装置的制作方法
技术领域
本申请涉及计算机技术领域,尤其涉及一种加载插件的方法及装置。
背景技术
有些应用程序具有启动多个实例的功能。例如用户可以在同一台计算机上以不 同的用户名登录即时通讯客户端,用户登录的各个即时通讯客户端是即时通讯软件的一个 实例。当其中一个即时通讯客户端实例需要在客户端加载插件时,现有解决方案为每 个实例均在客户端加载一个插件实例。发明人在研究过程中,发现上述现有解决方案占用客户端的系统资源较多,影响 了系统性能。

发明内容
本申请实施例的目的是提供一种加载插件的方法及装置,以减少对系统资源的占 用,提高系统性能。一种加载插件的方法,所述方法包括宿主程序获知启动的一个实例要加载插件,所述宿主程序支持至少一个实例;所述宿主程序获取插件单实例配置列表,所述插件单实例配置列表至少包括要求 启动单实例的插件的信息;所述宿主程序根据所述插件单实例配置列表判断要加载的插件是否要求启动单 实例;若所述要加载的插件要求启动单实例,所述宿主程序从插件托管进程获取插件的 通讯接口,所述插件托管进程至少用于管理所述宿主程序的实例对要求启动单实例的插件 的访问;所述启动的一个实例利用所述插件的通讯接口对所述要加载的插件执行加载操作。优选地,所述插件单实例配置列表由服务器或者客户端创建。可选地,在所述宿主程序从插件托管进程获取插件的通讯接口之前,所述方法还 包括所述宿主程序检查操作系统中是否存在所述插件托管进程,所述插件托管进程由 所述要加载的插件的ID进行标识,若是,则所述宿主程序启动所述插件托管进程。可选地,在所述宿主程序启动所述插件托管进程之后,所述方法还包括所述宿主程序向所述插件托管进程请求加载所述要加载的插件。可选地,在所述宿主程序向所述插件托管进程请求加载所述要加载的插件之后, 所述方法还包括所述插件托管进程判断所述要加载的插件是否已被创建,若是,向所述宿主程序返回所述插件的通讯接口,否则创建所述要加载的插件,并向所述宿主程序返回所述插件 的通讯接口。优选地,若所述操作系统中不存在所述插件托管进程,则所述宿主程序使用标准 应用程序编程接口创建所述插件托管进程,所述插件托管进程由所述要加载的插件的ID 进行标识。可选地,在所述启动的一个实例利用所述插件句柄对所述要加载的插件执行加载 操作之后,所述方法还包括当所述启动的一个实例退出运行后,所述宿主程序通知所述插件托管进程删除退 出运行的实例。可选地当计数器的值大于预置门限时,所述插件托管进程结束所管理的所有插 件的运行。优选地,所述通讯接口为COM接口。一种加载插件的装置,所述装置运行于客户端,所述装置包括获知单元,用于获知启动的一个宿主程序实例要加载插件,所述宿主程序支持至 少一个实例;第一获取单元,用于获取插件单实例配置列表,所述插件单实例配置列表至少包 括要求启动单实例的插件的信息;判断单元,用于根据所述插件单实例配置列表判断要加载的插件是否要求启动单 实例;第二获取单元,用于若所述要加载的插件要求启动单实例,从插件托管进程获取 插件的通讯接口,所述插件托管进程用于管理所述宿主程序的实例对要求启动单实例的插 件的访问;执行单元,用于利用所述插件的通讯接口对所述要加载的插件执行加载操作。可选地,所述装置还包括检查单元,用于在所述第二获取单元执行操作之前,检查操作系统中是否存在所 述插件托管进程,所述插件托管进程由所述要加载的插件的ID进行标识;启动单元,用于当所述检查单元检查出所述操作系统中存在所述插件托管进程 时,启动所述插件托管进程。可选地,所述装置还包括请求单元,用于在所述启动单元执行操作之后,向所述插件托管进程请求加载所 述要加载的插件;所述插件托管进程判断所述要加载的插件是否已被创建,若是,向所述第二获取 单元返回所述插件的通讯接口,否则创建所述要加载的插件,并向所述第二获取单元返回 所述插件的通讯接口。可选地,所述装置还包括创建单元,用于当所述检查单元检查出所述操作系统中不存在所述插件托管进程 时,使用标准应用程序编程接口创建所述插件托管进程,所述插件托管进程由所述要加载 的插件的ID进行标识。可选地,所述装置还包括
通知单元,用于在所述执行单元执行操作之后,当所述启动的一个实例退出运行 后,通知所述插件托管进程删除退出运行的实例。可以看出,在本申请实施例中,宿主程序要获取一个插件单实例配置列表,当宿主 程序的实例要加载的插件是要求单实例的插件时,宿主程序从插件托管进程获取插件的通 讯接口,如COM接口。宿主程序的实例可以利用插件的通讯接口对要加载的插件执行加载 操作。由于要加载的插件要求单实例,因此,宿主程序的各实例加载的均是该插件的同一个 实例,从而减少了对系统资源的占用,提高了系统性能。


为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提 下,还可以根据这些附图获得其他的附图。图1为本申请实施例一方法流程图;图2为本申请实施例二方法流程图;图3为申请实施例三装置结构框图;图4为本申请实施例四装置结构框图。
具体实施例方式为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实 施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施 例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通 技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护 的范围。为便于理解,首先介绍以下术语插件指符合宿主程序的接入规范,能够运行于宿主程序,且非宿主程序本身所必 须的功能或者业务模块,从物理形式上看,包含但不限于动态链接库。宿主程序供插件运行的载体,同时制定了插件的接入规范。插件托管进程用于加载要求单实例的插件,管理宿主程序对要求单实例的插件 的访问,管理要求单实例的插件的生命周期,即当没有宿主程序在使用插件时,卸载插件, 然后退出运行。单实例的意思是整个系统上所有的即时通讯客户端共享的同一份插件实例。请参考图1,为本申请实施例一方法流程图,可以包括以下步骤步骤101 宿主程序获知启动的一个实例要加载插件,所述宿主程序支持至少一 个实例;步骤102 所述宿主程序获取插件单实例配置列表,所述插件单实例配置列表至 少包括要求启动单实例的插件的信息;步骤103 所述宿主程序根据所述插件单实例配置列表判断要加载的插件是否要 求启动单实例;6
步骤104 若所述要加载的插件要求启动单实例,所述宿主程序从插件托管进程 获取插件的通讯接口,所述插件托管进程用于管理所述宿主程序的实例对要求启动单实例 的插件的访问;步骤105 所述启动的一个实例利用所述插件的通讯接口对所述要加载的插件执 行加载操作。可以看出,在本申请实施例中,宿主程序要获取一个插件单实例配置列表,当宿主 程序的实例要加载的插件是要求单实例的插件时,宿主程序从插件托管进程获取插件的通 讯接口,如COM接口。宿主程序的实例可以利用插件的通讯接口对要加载的插件执行加载 操作。由于要加载的插件要求单实例,因此,宿主程序的各实例加载的均是该插件的同一个 实例,从而减少了对系统资源的占用,提高了系统性能。下面一个更加具体的实施例对本申请进行说明。请参考图2,为本申请实施例二方法流程图,可以包括以下步骤步骤201 客户端启动宿主程序(例如即时通讯软件)的一个实例;该宿主程序具有支持至少一个实例的功能。客户端在执行步骤201之前,可以已 经启动了该宿主程序的另一个实例,或者,客户端在步骤201中第一次启动该宿主程序的 一个实例。步骤202 宿主程序获知用户要在步骤201中启动的实例上使用插件功能;步骤203 宿主程序获取插件单实例配置列表;插件单实例配置列表可以由服务器创建并进行配置,还可以由客户端创建并进行 配置。插件单实例配置列表至少包括要求启动单实例的插件的信息。具体地,插件单实例 列表可以参考以下具体实例< xml version=" 1.0" encoding="gb2312" > 〈Singletons〉 〈Singleton AppID=I 8401 Name=”翻译插件"/> 〈Singleton AppID=27485 Name="朴克插件’’/>〈/Singletons〉在上述具体实例中,“翻译插件”以及“扑克插件”仅启动单实例,其中,18401是“翻 译插件”在宿主程序中的标识插件ID (AppID),27485是“扑克插件”的AppID。需要指出的 是,本申请实施例的插件单实例配置列表不局限于上述具体实例。步骤204 宿主程序根据获取的单实例配置列表判断用户要使用的插件是否启动 单实例,若是,则进入步骤205,否则,加载该插件,流程结束;由于只有当用户要使用的插件要求启动单实例这个条件满足时才进入步骤205, 因此,宿主程序启动的各个实例均加载的是该插件所要求的单实例。当用户要使用的插件 不要求启动单实例时,按照正常流程为步骤201中启动的实例加载该插件的一个实例。步骤205 宿主程序检查操作系统中是否存在一个该插件ID标识的插件托管进程,若是,则进入步骤206,否则,宿主程序使用COM提供的标准应用程序编程接口(API)创 建一个该插件ID标识的插件托管进程,并进入步骤206 ;插件托管进程是一个基于COM技术实现的进程外组件。宿主程序创建插件托管进 程后,还要保存该插件托管进程的通讯接口(如COM接口)与该插件ID的对应关系。步骤206 宿主程序启动该插件ID标识的插件托管进程,若启动成功,宿主程序得 到COM API返回的一个该插件托管进程的通讯接口,进而可以通过该插件托管进程的通讯 接口与插件托管进程进行通信;步骤207 宿主程序向上述插件托管进程请求加载用户要求使用的插件;步骤208 上述插件托管进程判断该插件是否已被创建,若是,进入步骤209,否 则,使用COM提供的API创建该插件,并进入步骤209 ;步骤209 上述插件托管进程向宿主程序返回该插件的通讯接口 ;通过此接口,宿主程序可以访问插件。上述插件托管进程维护了一个插件使用列表,插件使用列表用于记录宿主程序启 动的各实例的信息。当步骤201中启动的实例可以利用宿主程序接收到的该插件的通讯接 口加载该插件时,插件托管进程将步骤201中启动的实例的信息记录至插件使用列表,表 明多了一个宿主程序的实例要加载该插件。步骤210 宿主程序在步骤201中启动的实例使用该插件的通讯接口加载该插件。由于该插件是要求启动单实例的插件,故无论哪个被启动的实例加载该插件时, 加载的都是该插件的同一个实例。可选地,当宿主程序的一个实例退出运行后,宿主程序利用插件托管进程的托管 句柄通知插件托管进程,使插件托管进程在插件使用列表中删除退出运行的实例。可选地,插件托管进程周期性查看插件使用列表,若还存在插件使用者,则将计数 器加1,当计数器的值大于预置门限时,插件托管进程结束插件的运行,以释放掉插件运行 所占用的资源。可以看出,在本申请实施例中,宿主程序要获取一个插件单实例配置列表,当宿主 程序的实例要加载的插件是要求单实例的插件时,宿主程序从插件托管进程获取插件的通 讯接口,宿主程序的实例可以利用插件的通讯接口对要加载的插件执行加载操作。由于要 加载的插件要求单实例,因此,宿主程序的各实例加载的均是该插件的同一个实例,从而减 少了对系统资源的占用,提高了系统性能。此外,由于配置了插件单实例配置列表,且由插件托管进程统一管理宿主程序各 实例对插件单实例的访问,从而无需插件自身判断是否要求单实例,降低了插件开发者的 负担,提高了系统的可管理性。请参考图3,为申请实施例三装置结构框图,所述装置运行于客户端,可以包括获知单元301,用于获知启动的一个宿主程序实例要加载插件,所述宿主程序支持 至少一个实例;第一获取单元302,用于获取插件单实例配置列表,所述插件单实例配置列表至少 包括要求启动单实例的插件的信息;判断单元303,用于根据所述插件单实例配置列表判断要加载的插件是否要求启 动单实例;
第二获取单元304,用于若所述要加载的插件要求启动单实例,从插件托管进程获 取插件的通讯接口,所述插件托管进程用于管理所述宿主程序的实例对要求启动单实例的 插件的访问;执行单元305,用于利用所述插件的通讯接口对所述要加载的插件执行加载操作。可以看出,在本申请实施例中,第一获取单元要获取一个插件单实例配置列表,当 宿主程序的实例要加载的插件是要求单实例的插件时,第二获取单元插件托管进程获取插 件的通讯接口,宿主程序的实例可以利用插件的通讯接口对要加载的插件执行加载操作。 由于要加载的插件要求单实例,因此,宿主程序的各实例加载的均是该插件的同一个实例, 从而减少了对系统资源的占用,提高了系统性能。请参考图4,为本申请实施例四装置结构框图,在图3的基础上,还可以包括检查单元401,用于在所述第二获取单元304执行操作之前,检查操作系统中是否 存在所述插件托管进程,所述插件托管进程由所述要加载的插件的ID进行标识;启动单元402,用于当所述检查单元401检查出所述操作系统中存在所述插件托 管进程时,启动所述插件托管进程。请求单元403,用于在所述启动单元402执行操作之后,向所述插件托管进程请求 加载所述要加载的插件;所述插件托管进程判断所述要加载的插件是否已被创建,若是,向所述第二获取 单元返回所述插件的通讯接口,否则创建所述要加载的插件,并向所述第二获取单元返回 所述插件的通讯接口。创建单元404,用于当所述检查单元401检查出所述操作系统中不存在所述插件 托管进程时,使用标准应用程序编程接口创建所述插件托管进程,所述插件托管进程由所 述要加载的插件的ID进行标识。通知单元405,用于在所述执行单元305执行操作之后,当所述启动的一个实例退 出运行后,通知所述插件托管进程删除退出运行的实例。为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本 申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可 借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质 上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品 可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备 (可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些 部分所述的方法。本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部 分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实 施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例 的部分说明即可。本申请可用于众多通用或专用的计算系统环境或配置中。例如个人计算机、服务 器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶 盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的9分布式计算环境等等。本中请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序 模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组 件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由 通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以 位于包括存储设备在内的本地和远程计算机存储介质中。虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和 变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的 精神。
权利要求
1.一种加载插件的方法,其特征在于,所述方法包括宿主程序获知启动的一个实例要加载插件,所述宿主程序支持至少一个实例;所述宿主程序获取插件单实例配置列表,所述插件单实例配置列表至少包括要求启动 单实例的插件的信息;所述宿主程序根据所述插件单实例配置列表判断要加载的插件是否要求启动单实例;若所述要加载的插件要求启动单实例,所述宿主程序从插件托管进程获取插件的通讯 接口,所述插件托管进程至少用于管理所述宿主程序的实例对要求启动单实例的插件的访 问;所述启动的一个实例利用所述插件的通讯接口对所述要加载的插件执行加载操作。
2.根据权利要求1所述的方法,其特征在于,所述插件单实例配置列表由服务器或者 客户端创建。
3.根据权利要求1所述的方法,其特征在于,在所述宿主程序从插件托管进程获取插 件的通讯接口之前,所述方法还包括所述宿主程序检查操作系统中是否存在所述插件托管进程,所述插件托管进程由所述 要加载的插件的ID进行标识,若是,则所述宿主程序启动所述插件托管进程。
4.根据权利要求3所述的方法,其特征在于,在所述宿主程序启动所述插件托管进程 之后,所述方法还包括所述宿主程序向所述插件托管进程请求加载所述要加载的插件。
5.根据权利要求4所述的方法,其特征在于,在所述宿主程序向所述插件托管进程请 求加载所述要加载的插件之后,所述方法还包括所述插件托管进程判断所述要加载的插件是否已被创建,若是,向所述宿主程序返回 所述插件的通讯接口,否则创建所述要加载的插件,并向所述宿主程序返回所述插件的通 讯接口。
6.根据权利要求3所述的方法,其特征在于,若所述操作系统中不存在所述插件托管 进程,则所述宿主程序使用标准应用程序编程接口创建所述插件托管进程,所述插件托管 进程由所述要加载的插件的ID进行标识。
7.根据权利要求1所述的方法,其特征在于,在所述启动的一个实例利用所述插件句 柄对所述要加载的插件执行加载操作之后,所述方法还包括当所述启动的一个实例退出运行后,所述宿主程序通知所述插件托管进程删除退出运 行的实例。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括当计数器的值大于预置 门限时,所述插件托管进程结束所管理的所有插件的运行。
9.根据权利要求1所述的方法,其特征在于,所述通讯接口为COM接口。
10.一种加载插件的装置,其特征在于,所述装置运行于客户端,所述装置包括获知单元,用于获知启动的一个宿主程序实例要加载插件,所述宿主程序支持至少一 个实例;第一获取单元,用于获取插件单实例配置列表,所述插件单实例配置列表至少包括要 求启动单实例的插件的信息;判断单元,用于根据所述插件单实例配置列表判断要加载的插件是否要求启动单实例;第二获取单元,用于若所述要加载的插件要求启动单实例,从插件托管进程获取插件 的通讯接口,所述插件托管进程用于管理所述宿主程序的实例对要求启动单实例的插件的 访问;执行单元,用于利用所述插件的通讯接口对所述要加载的插件执行加载操作。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括检查单元,用于在所述第二获取单元执行操作之前,检查操作系统中是否存在所述插 件托管进程,所述插件托管进程由所述要加载的插件的ID进行标识;启动单元,用于当所述检查单元检查出所述操作系统中存在所述插件托管进程时,启 动所述插件托管进程。
12.根据权利要求10所述的装置,其特征在于,所述装置还包括请求单元,用于在所述启动单元执行操作之后,向所述插件托管进程请求加载所述要 加载的插件;所述插件托管进程判断所述要加载的插件是否已被创建,若是,向所述第二获取单元 返回所述插件的通讯接口,否则创建所述要加载的插件,并向所述第二获取单元返回所述 插件的通讯接口。
13.根据权利要求10所述的装置,其特征在于,所述装置还包括创建单元,用于当所述检查单元检查出所述操作系统中不存在所述插件托管进程时, 使用标准应用程序编程接口创建所述插件托管进程,所述插件托管进程由所述要加载的插 件的ID进行标识。
14.根据权利要求10所述的装置,其特征在于,所述装置还包括通知单元,用于在所述执行单元执行操作之后,当所述启动的一个实例退出运行后,通 知所述插件托管进程删除退出运行的实例。
全文摘要
本申请实施例公开了一种加载插件的方法及装置。所述方法包括宿主程序获知启动的一个实例要加载插件,所述宿主程序支持至少一个实例;所述宿主程序获取插件单实例配置列表,所述插件单实例配置列表至少包括要求启动单实例的插件的信息;所述宿主程序根据所述插件单实例配置列表判断要加载的插件是否要求启动单实例;若所述要加载的插件要求启动单实例,所述宿主程序从插件托管进程获取插件的通讯接口,所述插件托管进程至少用于管理所述宿主程序的实例对要求启动单实例的插件的访问;所述启动的一个实例利用所述插件的通讯接口对所述要加载的插件执行加载操作。通过本申请,可以减少对系统资源的占用,提高系统性能。
文档编号G06F9/48GK102043645SQ20091020608
公开日2011年5月4日 申请日期2009年10月20日 优先权日2009年10月20日
发明者张利明 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1