发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种应用程序更新方法和相应的一种应用程序更新装置。
依据本发明的一个方面,提供了一种应用程序更新方法,该方法包括:
所述应用程序由外壳程序和数据文件组成;其中,所述数据文件中封装有所述应用程序的用户界面和业务逻辑;
所述外壳程序通过所述数据文件实现所述应用程序的功能;
当所述应用程序需要更新时,所述外壳程序获取新版本的数据文件,之后通过所述新版本的数据文件实现所述应用程序的功能;
其中,所述数据文件为可执行文件或不可执行文件;
所述数据文件为可执行文件时,所述外壳程序通过启动所述数据文件并给予所述数据文件执行权来实现所述应用程序的功能;所述数据文件为不可执行文件时,所述外壳程序根据封装在所述数据文件中的用户界面信息和业务逻辑信息实现所述应用程序的功能。
可选地,所述数据文件为动态链接库形式的可执行文件;或者,所述数据文件为文本或图片形式的不可执行文件。
可选地,所述数据文件为可执行文件时,所述数据文件中定义有用于启动本数据文件的启动接口和用于关闭本数据文件的关闭接口。
可选地,所述数据文件为可执行文件时,所述数据文件中还定义有版本获取接口;
所述外壳程序获取新版本的数据文件,并通过所述新版本的数据文件实现所述应用程序的功能包括:
所述外壳程序通过原数据文件中的版本获取接口获取原数据文件的版本信息,将该版本信息携带在版本查询请求消息中发送给服务器;
所述外壳程序接收服务器返回的版本查询响应消息,如果该版本查询响应消息中包含新版本信息,则根据该新版本信息下载新版本数据文件;
所述外壳程序通过原数据文件中的关闭接口关闭原数据文件,通过新版本数据文件的启动接口启动新版本数据文件并给予新版本数据文件执行权。
可选地,数据文件为不可执行文件,且数据文件中还包含版本信息;
所述外壳程序获取新版本的数据文件,并通过所述新版本的数据文件实现所述应用程序的功能包括:
所述外壳程序从原数据文件中获取版本信息;
所述外壳程序将该版本信息携带在版本查询请求消息中发送给服务器;
所述外壳程序接收服务器返回的版本查询响应消息,如果该版本查询响应消息中包含新版本信息,则根据该新版本信息下载新版本数据文件;
所述外壳程序根据封装在新版本数据文件中的用户界面信息和业务逻辑信息实现所述应用程序的功能。
可选地,在根据该新版本信息下载新版本数据文件之前,该方法进一步包括:
所述外壳程序提示用户是否更新,并在接收到用户的确认更新指令时执行所述根据该新版本信息下载新版本数据文件的步骤。
依据本发明的另一个方面,提供了一种应用程序更新装置,该装置包括:应用外壳单元和存储单元;
所述存储单元,适于保存封装有所述应用程序的用户界面和业务逻辑的数据文件;
所述应用外壳单元,适于通过所述存储单元中的数据文件实现所述应用程序的功能;以及在所述应用程序需要更新时,适于获取新版本的数据文件保存到所述存储单元中,之后通过所述存储单元中的所述新版本的数据文件实现所述应用程序的功能;
其中,所述应用外壳单元进一步包括:第一外壳子单元和第二外壳子单元;
所述第一外壳子单元,适于在所述存储单元中的数据文件为可执行文件时,通过启动该数据文件并给予该数据文件执行权来实现所述应用程序的功能;
所述第二外壳子单元,适于在所述存储单元中的数据文件为不可执行文件时,根据封装在该数据文件中的用户界面信息和业务逻辑信息实现所述应用程序的功能。
可选地,所述存储单元,适于保存动态链接库形式的数据文件,或者适于保存文本或图片形式的数据文件。
可选地,所述存储单元,进一步适于保存其中定义有用于启动本数据文件的启动接口和用于关闭本数据文件的关闭接口的可执行文件形式的数据文件。
可选地,所述存储单元,进一步适于保存其中定义有用于启动本数据文件的启动接口、用于关闭本数据文件的关闭接口以及版本获取接口的可执行文件形式的数据文件;
所述应用外壳单元进一步包括:第一下载更新子单元;
所述第一下载更新子单元,适于通过所述存储单元中的可执行文件形式的数据文件的版本获取接口获取该数据文件的版本信息,将该版本信息携带在版本查询请求消息中发送给服务器,接收服务器返回的版本查询响应消息,如果该版本查询响应消息中包含新版本信息,则根据该新版本信息下载新版本的可执行文件形式的数据文件并保存到存储单元中;
所述第一外壳子单元,进一步适于通过存储单元中的可执行文件形式的原数据文件中的关闭接口关闭该原数据文件,通过存储单元中的可执行文件形式的新版本数据文件的启动接口启动该新版本数据文件并给予该新版本数据文件执行权。
可选地,所述存储单元,进一步适于保存包含版本信息的不可执行文件形式的数据文件;
所述应用外壳单元进一步包括:第二下载更新子单元;
所述第二下载更新子单元,适于从存储单元中的不可执行文件形式的数据文件中获取版本信息,将该版本信息携带在版本查询请求消息中发送给服务器,接收服务器返回的版本查询响应消息,如果该版本查询响应消息中包含新版本信息,则根据该新版本信息下载新版本的不可执行文件形式的数据文件并保存到存储单元中;
所述第二外壳子单元,进一步适于根据存储单元中的不可执行文件形式的新版本数据文件中封装的用户界面信息和业务逻辑信息实现所述应用程序的功能。
可选地,所述应用外壳单元进一步包括:提示子单元;
所述提示子单元,适于在所述第一下载更新子单元或所述第二下载更新子单元根据新版本信息下载新版本数据文件之前,提示用户是否更新,并在接收到用户的确认更新指令时,通知所述第一下载更新子单元或所述第二下载更新子单元根据所述新版本信息下载新版本数据文件。
根据本发明的这种应用程序由外壳程序和数据文件组成,其中数据文件中封装有应用程序的用户界面和业务逻辑,外壳程序通过所述数据文件实现所述应用程序的功能;当所述应用程序需要更新时,所述外壳程序获取新版本的数据文件,之后通过所述新版本的数据文件实现所述应用程序的功能的技术方案中,由于应用程序的用户界面和业务逻辑都封装在数据文件中,因此应用程序更新时只需要更新数据文件即可,外壳程序不需要更新,且更新数据文件的过程由外壳程序来完成,用户不需要参与,即用户不需要像现有技术那样进行卸载旧版本的应用程序和安装新版本应用程序的操作,由此解决了应用程序更新的过程中用户操作繁琐的问题。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的一种应用程序更新方法的流程图。在本实施例中,应用程序由外壳程序和数据文件组成,如图1所示,该应用程序更新方法包括:
S110,外壳程序通过数据文件实现应用程序的功能,其中,该数据文件中封装有该应用程序的用户界面和业务逻辑。
在本发明的实施例中,数据文件可以为可执行文件,或者也可以为不可执行文件。
在本发明的一个实施例中,数据文件可以为DLL(DynamicLinkLibrary,动态链接库)形式的可执行文件。或者,在本发明的另一个实施例中,数据文件也可以为文本或图片形式的不可执行文件。
S120,当该应用程序需要更新时,所述外壳程序获取新版本的数据文件,之后通过该新版本的数据文件实现该应用程序的功能。
在本发明的一个实施例中,当数据文件为可执行文件时,外壳程序通过启动该数据文件并给予该数据文件执行权来实现该应用程序的功能。在本发明的另一个实施例中,当数据文件为不可执行文件时,外壳程序根据封装在该数据文件中的用户界面信息和业务逻辑信息实现该应用程序的功能。
在本发明的实施例中,面对用户的客户端就是外壳程序,具体的界面怎么展现,业务逻辑如何走,都由数据文件来决定,而不是代码。所以当应用程序需要升级时,外壳程序无需更新,只需要下载最新的数据文件即可。由于外壳程序不需要更新,且更新数据文件的过程由外壳程序来完成,因此用户不需要参与,即用户不需要像现有技术那样进行卸载旧版本的应用程序和安装新版本应用程序的操作,由此解决了应用程序更新的过程中用户操作繁琐的问题。
这里以Windows操作系统上的应用程序为例对本发明的方案进行说明:Windows操作系统上的应用程序基于MSI(microsoftinstaller,微软安装包)包,在制作MSI包时只需要留一些启动和更新的接口,实际的用户界面和业务逻辑都封装在数据文件中,数据文件可以是DLL但不限于DLL。所制作的MSI包即为本申请中所述的外壳程序。外壳程序在数据文件中查找到对应的入口然后加载并给予执行权来完成应用程序的启动。当应用程序需要更新时,外壳程序只需要下载最新的数据文件,下载完成后给予新数据文件执行权即可。用户不需要再去卸载应用程序以及安装新的安装包,对用户来说不需要进行更新的操作即可体验应用程序最新版本的功能。
前述已经提到,当应用程序需要更新时,外壳程序需要获取升级后的新数据文件。一般来说升级后的新数据文件从应用程序的服务提供商的服务器进行下载。这里将应用程序的服务提供商的服务器简称为服务器。因此外壳程序需要于服务器进行交互。在本发明的一个实施例中,外壳程序和服务器基于HTTP协议进行通信。
在本发明的一个实施例中,数据文件为可执行文件时,数据文件中定义有用于启动本数据文件的启动接口、用于关闭本数据文件的关闭接口。此外为了更新的方便,数据文件中还定义有版本获取接口。
以下通过进行应用程序更新的三个场景来对本发明的技术方案进行说明。
场景一
图2示出了根据本发明一个实施例的场景一中应用程序更新过程的流程图。如图2所示,包括如下步骤:
步骤S201,外壳程序向服务器发送携带当前数据文件的版本信息的版本查询请求。
当前数据文件中包含版本信息。当前数据文件为可执行文件时,外壳程序通过调用其版本获取接口获取其版本信息。当前数据文件为文本或图片等不可执行文件时,外壳程序直接从当前数据文件获取其版本信息。例如,当前数据文件的版本为1.0。
步骤S202,服务器收到外壳程序的版本查询请求后,通过对比本地的数据文件版本信息发现本地有更新版本的数据文件,向外壳程序返回包含新版本信息的版本查询响应。
例如,本步骤中服务器发现本地的最新本版为1.1,比1.0要新,新版本数据文件的信息携带在版本查询响应消息中返回给外壳程序。这里新版本信息包括:新版本数据文件的版本值以及新版本数据文件的下载地址。在本发明的一个实施例中,如果有新版本的数据文件,则在查询响应消息中设置版本头字段,该字段的值为新版本数据的版本值,如1.1,并在查询响应消息的设置数据文件头字段,该字段的值为新版本数据文件的地址。如果没有新版本的数据文件,则不在查询响应消息中设置版本头字段和数据文件头字段。
步骤S203,外壳程序发现版本查询响应消息中包含新版本信息,提示用户是否更新。
在本发明的一个实施例中,可以使用WINAPIMessageBox,上面有确定和取消按钮供用户选择。
步骤S204,用户确认更新。
例如,用于点击确定按钮以确认进行更新。
步骤S205,在收到用户的确认更新信息后,外壳程序根据版本查询响应中的新版本信息,向服务器请求下载新版本数据文件。
具体地,外壳程序根据版本查询响应中的新版本数据文件的地址,向服务器请求下载新版本数据文件。
步骤S206,服务器予以下载,外壳程序通过下载获得新版本数据文件。
如果数据文件为可执行文件时,外壳程序执行以下步骤S207-S209。如果数据文件为不可执行文件,则外壳程序直接根据封装在新版本数据文件中的用户界面信息和业务逻辑信息实现所述应用程序的功能,而不再利用当前原数据文件。
步骤S207,外壳程序关闭当前的数据文件。
当前数据文件为可执行数据文件时,外壳程序通过调用当前数据文件的关闭接口关闭当前数据文件。
步骤S208,外壳程序加载新版本数据文件。
步骤S209,外壳程序启动新版本数据文件。
当前数据文件为可执行数据文件时,外壳程序通过调用新版本数据文件的启动接口启动新版本数据文件。
步骤S210,用户看到新的用户界面。
在此过程中,用户只需要根据提示选择确认即可完成更新,不需要用户做其它的额外操作。
场景二
图3示出了根据本发明一个实施例的场景二中应用程序更新过程的流程图。如图3所示,包括如下步骤:
步骤S301,外壳程序向服务器发送携带当前数据文件的版本信息的版本查询请求。
例如,当前数据文件的版本为1.0。
步骤S302,服务器收到外壳程序的版本查询请求后,通过对比本地的数据文件版本信息发现本地没有更新版本的数据文件,向外壳程序返回不包含新版本信息的版本查询响应。
例如,本步骤中服务器发现本地的最新本版也为1.0,则查询响应消息中告知外壳程序当前版本1.0即为最新版本,无需进行更新。由于无需进行更新,因此外壳程序不需要进行更新操作。
场景三
图4示出了根据本发明一个实施例的场景二中应用程序更新过程的流程图。如图4所示,包括如下步骤:
步骤S401,外壳程序向服务器发送携带当前数据文件的版本信息的版本查询请求。
例如,当前数据文件的版本为1.0。
步骤S402,服务器收到外壳程序的版本查询请求后,通过对比本地的数据文件版本信息发现本地有更新版本的数据文件,向外壳程序返回包含新版本信息的版本查询响应。
例如,本步骤中服务器发现本地的最新本版为1.1,比1.0要新,新版本数据文件的信息携带在版本查询响应消息中返回给外壳程序。这里新版本信息包括:新版本数据文件的版本值以及新版本数据文件的下载地址。
步骤S403,外壳程序发现版本查询响应消息中包含新版本信息,提示用户是否更新。
在本发明的一个实施例中,可以使用WINAPIMessageBox,上面有确定和取消按钮供用户选择。
步骤S404,用户拒绝更新。例如,用于点击取消按钮以拒绝更新,此时外壳程序不需要进行更新操作。
例如,以开发一款Windows记事本程序为例,该记事本程序的主界面是一个Windows窗体,上面有一个文本框,这里设计时,需要把窗体和该记事本程序的业务逻辑封装在一个DLL里,并且需要标示版本,即该DLL是该记事本程序的数据文件。则记事本程序的DLL中还需要实现一套定义的接口:
INTWINAPIStart(void*args);//外壳程序通过该接口启动DLL;
INTWINAPIExit(void*args);//外壳程序通过该接口关闭该DLL,更新时需要使用;
VERSIONWINAPIGetVersion();//外壳程序获取该DLL的版本时使用。
该记事本程序的外壳程序在执行时,通过调用INTWINAPIStart来加载并启动该DLL,并给予该DLL执行权,因为有执行权,DLL可以做很多事情,如开线程、开窗口和访问后台数据等。外壳程序通过调用VERSIONWINAPIGetVersion来获取该DLL文件的版本信息,以及外壳程序通过调用INTWINAPIExit来关闭该DLL文件。
通过CreateWindowEx函数创建记事本的窗体,挂载消息泵,窗体的样式、大小,控件的数据量和功能等都卸载DLL中。且并在DLL中标示其版本为1.0.0.0。
假设该版本为1.0.0.0的DLL中存在漏洞,无法支持UNICODE编码的文本。为解决该问题开发了一个新的DLL,该在新DLL中修复了该漏洞,该新DLL中标识其版本为1.0.0.1。将新DLL提交到服务器上。
记事本程序的外壳程序在启动时或通过主动查询发现服务器上的DLL的版本比本地的新,于是外壳程序先将新版本的DLL下载到本地,然后调用原DLL的INTWINAPIExit接口来卸载原DLL,接着调用新DLL的INTWINAPIStart接口来加载并启动新DLL。这样用户看到的版本是已经没有所述漏洞的版本,达到了更新的目的。用户不需要卸载整个程序然后重新安装MSI,用户除了确认是否需要更新外,不需要作其它任何操作。
应用程序的更新除了修复漏洞,还可以其它任何方面的改进,如修改用户界面、增加功能等。
本发明的技术方案省去了用户下载更新、卸载并安装的烦恼,用户可以体验到无缝更新。
图5示出了根据本发明一个实施例的一种应用程序更新装置的结构图。如图5所示,该应用程序更新装置包括:应用外壳单元501和存储单元502。
存储单元502,适于保存封装有应用程序的用户界面和业务逻辑的数据文件。
应用外壳单元501,适于通过存储单元502中的数据文件实现应用程序的功能;以及在该应用程序需要更新时,适于获取新版本的数据文件保存到存储单元502中,之后通过存储单元502中的新版本的数据文件实现该应用程序的功能。
图5所示的装置,省去了用户下载更新、卸载并安装的过程,使得用户可以体验到无缝更新。
图6示出了根据本发明又一个实施例的一种应用程序更新装置的结构图。如图6所示,该应用程序更新装置包括:应用外壳单元601和存储单元602。
存储单元602,适于保存封装有应用程序的用户界面和业务逻辑的数据文件。
应用外壳单元601,适于通过存储单元602中的数据文件实现应用程序的功能;以及在该应用程序需要更新时,适于获取新版本的数据文件保存到存储单元602中,之后通过存储单元602中的新版本的数据文件实现该应用程序的功能。
参见图6,应用外壳单元610包括:第一外壳子单元601、第二外壳子单元602、第一下载更新子单元603、第二下载更新子单元604和提示子单元605。
在本发明的一个实施例中,应用外壳单元610可以包括第一外壳子单元601和第二外壳子单元602,也可以只包括第一外壳子单元601,或者也可以只包括第二外壳子单元602。
第一外壳子单元601,适于在存储单元620中的数据文件为可执行文件时,通过启动该数据文件并给予该数据文件执行权来实现该应用程序的功能。
第二外壳子单元602,适于在存储单元620中的数据文件为不可执行文件时,根据封装在该数据文件中的用户界面信息和业务逻辑信息实现所述应用程序的功能。
在本发明的一个实施例中,存储单元620,适于保存动态链接库形式的数据文件,或者适于保存文本或图片形式的数据文件。
在本发明的一个实施例中,存储单元620,适于保存其中定义有用于启动本数据文件的启动接口和用于关闭本数据文件的关闭接口的可执行文件形式的数据文件。
在本发明的一个实施例中,存储单元620,还适于保存其中定义有用于启动本数据文件的启动接口、用于关闭本数据文件的关闭接口以及版本获取接口的可执行文件形式的数据文件。应用外壳单元610至少包括:第一外壳子单元601和第一下载更新子单元603。第一下载更新子单元603,适于通过存储单元620中的可执行文件形式的数据文件的版本获取接口获取该数据文件的版本信息,将该版本信息携带在版本查询请求消息中发送给服务器,接收服务器返回的版本查询响应消息,如果该版本查询响应消息中包含新版本信息,则根据该新版本信息下载新版本的可执行文件形式的数据文件并保存到存储单元620中。第一外壳子单元601,适于通过存储单元620中的可执行文件形式的原数据文件中的关闭接口关闭该原数据文件,通过存储单元620中的可执行文件形式的新版本数据文件的启动接口启动该新版本数据文件并给予该新版本数据文件执行权,实现该应用程序的功能。
在本发明的又一个实施例中,存储单元620,适于保存包含版本信息的不可执行文件形式的数据文件。应用外壳单元610至少包括:第二外壳子单元602和第二下载更新子单元604。第二下载更新子单元604,适于从存储单元620中的不可执行文件形式的数据文件中获取版本信息,将该版本信息携带在版本查询请求消息中发送给服务器,接收服务器返回的版本查询响应消息,如果该版本查询响应消息中包含新版本信息,则根据该新版本信息下载新版本的不可执行文件形式的数据文件并保存到存储单元620中。第二外壳子单元602,适于根据存储单元620中的不可执行文件形式的新版本数据文件中封装的用户界面信息和业务逻辑信息实现该应用程序的功能。
提示子单元605,适于在第一下载更新子单元603或第二下载更新子单元604根据新版本信息下载新版本数据文件之前,提示用户是否更新,并在接收到用户的确认更新指令时,通知第一下载更新子单元603或第二下载更新子单元604根据该新版本信息下载新版本数据文件。
在图6所示的装置中,应用程序的具体的界面怎么展现,业务逻辑如何走,都由存储单元中的数据文件来决定。所以当应用程序需要升级时,由应用外壳单元下载最新的数据文件并保存到存储单元中,之后应用外壳单元根据新的数据文件实现应用程序的功能。因此用户不需要参与,解决了应用程序更新的过程中用户操作繁琐的问题。
综上所述,根据本发明的这种应用程序由外壳程序和数据文件组成,其中数据文件中封装有应用程序的用户界面和业务逻辑,外壳程序通过所述数据文件实现所述应用程序的功能;当所述应用程序需要更新时,所述外壳程序获取新版本的数据文件,之后通过所述新版本的数据文件实现所述应用程序的功能的技术方案中,由于应用程序的用户界面和业务逻辑都封装在数据文件中,因此应用程序更新时只需要更新数据文件即可,外壳程序不需要更新,且更新数据文件的过程由外壳程序来完成,用户不需要参与,即用户不需要像现有技术那样进行卸载旧版本的应用程序和安装新版本应用程序的操作,由此解决了应用程序更新的过程中用户操作繁琐的问题。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的一种应用程序更新装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。