一种应用程序的运行控制方法及装置与流程

文档序号:25543313发布日期:2021-06-18 20:40
一种应用程序的运行控制方法及装置与流程

本申请涉及应用程序运行控制技术领域,具体而言,涉及一种应用程序的运行控制方法及装置。



背景技术:

在日常工作和生活中,实现应用程序的分身、多开是一些常见的需求。比如日常工作中,有人需要在电脑上登录多个聊天账号,或者需要一个程序打开一个文档,即多个文档多个程序。但是大多数应用程序在设计上采用单实例模式,即当前用户下只允许登录一个账户(比如社交聊天软件),或者多个同类型的文件只能通过一个进程打开(比如不同类型的办公软件),不能满足上述使用场景下的应用程序的分身、多开的使用需求。

为了解决上述问题,windows平台上出现一些软件产品,可实现应用程序分身的功能,满足某些聊天应用多账号同时登录,办公类软件一篇文档一个进程。但是,在linux平台上,由于linux系统和windows系统的系统架构和实现方法不同,难以满足用户对应用程序的分身、多开的使用需求,用户体验不佳。

针对相关技术中在linux系统下无法启动并同时运行多个相同的应用程序的问题,目前尚未提出有效的解决方案。



技术实现要素:

本申请提供一种应用程序的运行控制方法及装置,以解决相关技术中在linux系统下无法启动并同时运行多个相同的应用程序的问题。

根据本申请的一个方面,提供了一种应用程序的运行控制方法。该方法包括:在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作,其中,应用程序实例用于表征应用程序的启动状态;将访问操作的访问地址重定向到目标地址,并接收基于目标地址返回的目标访问结果,其中,目标访问结果用于指示不存在应用程序实例;基于目标访问结果控制应用程序完成启动。

可选地,在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作之前,该方法还包括:启动计算机的操作系统,并启动应用程序对应的进程;将钩子函数注入至启动的进程的内存空间中,其中,钩子函数用于监控进程运行时应用程序调用的接口函数,并控制接口函数的执行行为。

可选地,在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作之后,该方法还包括:判断访问操作的访问地址中是否存在应用程序实例;在存在应用程序实例的情况下,执行将访问操作的访问地址重定向到目标地址的步骤。

可选地,在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作包括:通过钩子函数拦截应用程序调用的第一动态链接库,其中,第一动态链接库中包含第一访问函数,第一访问函数用于访问应用程序实例。

可选地,将访问操作的访问地址重定向到目标地址,并接收到基于目标地址返回的目标访问结果包括:控制应用程序获取第二动态链接库中的第二访问函数的目标函数参数,其中,目标函数参数包括访问地址,第二访问函数的访问地址与第一访问函数的访问地址不同;接收第一访问函数基于目标函数参数执行访问行为返回的不存在应用程序实例的访问结果。

可选地,应用程序实例所在的地址为以下之一:应用程序的安装路径下的目标文件地址,监管应用程序的目标服务器的内存地址。

可选地,计算机的操作系统为linux系统。

根据本申请的另一方面,提供了一种应用程序的运行控制装置。该装置包括:

拦截单元,用于在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作,其中,应用程序实例的存在用于表征应用程序已启动。

重定向单元,用于将访问操作的访问地址重定向到目标地址,并接收基于目标地址返回的目标访问结果,其中,目标访问结果用于指示不存在应用程序实例。

控制单元,用于基于目标访问结果控制应用程序完成启动。

根据本发明实施例的另一方面,还提供了一种非易失性存储介质,非易失性存储介质包括存储的程序,其中,程序运行时控制非易失性存储介质所在的设备执行一种应用程序的运行控制方法。

根据本发明实施例的另一方面,还提供了一种电子装置,包含处理器和存储器;存储器中存储有计算机可读指令,处理器用于运行计算机可读指令,其中,计算机可读指令运行时执行一种应用程序的运行控制方法。

通过本申请,采用以下步骤:在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作,其中,应用程序实例用于表征应用程序的启动状态;将访问操作的访问地址重定向到目标地址,并接收基于目标地址返回的目标访问结果,其中,目标访问结果用于指示不存在应用程序实例;基于目标访问结果控制应用程序完成启动,解决了相关技术中在linux系统下无法启动并同时运行多个相同的应用程序的问题。通过拦截应用程序对应用程序实例的访问操作,并对访问操作的访问地址进行重定向,进而达到了在linux系统下可以启动并同时运行多个相同的应用程序的效果。

附图说明

构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例提供的应用程序的运行控制方法的流程图;

图2是根据本申请实施例提供的应用程序的另一种运行控制方法的流程图;

图3是根据本申请实施例提供的应用程序的可选的运行控制方法的流程图;以及

图4是根据本申请实施例提供的应用程序的运行控制装置的示意图。

具体实施方式

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

为了便于描述,以下对本申请实施例涉及的部分名词或术语进行说明:

hook技术:又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理该函数的执行行为,还可以强制结束消息的传递。

xwindowsystem:简称x,或者x11,或者x-windows。之所以称作x,是因为在字母表中x位于w之后,而w是mit在x之前所使用的gui系统。之所以称作x11,是因为在1987年的时候,xwindowsystem已经进化到第11个版本了,后续所有的x,都是基于x11版本发展而来。

根据本申请的实施例,提供了一种应用程序的运行控制方法。

图1是根据本申请实施例的应用程序的运行控制方法的流程图。如图1所示,该方法包括以下步骤:

步骤s102,在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作,其中,应用程序实例用于表征应用程序的启动状态。

具体地,在应用程序已启动的情况下,会在预设的地址存储应用程序对应的应用程序实例,应用程序去预设地址进行访问操作,在访问到对应的应用程序实例的情况下,说明应用程序已经启动,在未访问到对应的应用程序实例的情况下,说明应用程序未启动,当前次启动为首次启动。

可选地,在本申请实施例提供的应用程序的运行控制方法中,计算机的操作系统为linux系统。

具体地,在linux系统下,通过应用程序的单实例实现机制控制应用程序的启动,也即,在当前次启动的过程中,访问到对应的应用程序实例的情况下,阻止应用程序的此次启动,在未访问到对应的应用程序实例的情况下,允许应用程序的此次启动。

可选地,在本申请实施例提供的应用程序的运行控制方法中,应用程序实例所在的地址为以下之一:应用程序的安装路径下的目标文件地址,监管应用程序的目标服务器的内存地址。

具体地,在linux系统下,一方面,应用程序启动后,应用程序实例可以以特定的形式存储在特定的路径下,如以文件的形式存储在应用程序的安装路径下,也即,应用程序实例所在的地址可以为应用程序的安装路径下的目标文件地址。

另一方面,linux系统的平台通过dbus协议(消息总线的方式)控制所有应用程序,应用程序都由dbus服务监管,应用程序启动后,应用程序实例可以在系统dbus服务的内存中存在,也即,应用程序实例所在的地址可以为dbus服务的内存地址。

因而,在linux系统下,应用程序的单实例实现机制,可以通过检测特殊路径下的某个文件是否存在来实现,在一些使用dbus总线的应用程序中,也可以通过检测dbus总线连接的服务的特定服务名是否存在来实现。

拦截应用程序对应用程序实例的访问操作可以通过钩子函数实现,可选地,在本申请实施例提供的应用程序的运行控制方法中,在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作之前,该方法还包括:启动计算机的操作系统,并启动应用程序对应的进程;将钩子函数注入至启动的进程的内存空间中,其中,钩子函数用于监控进程运行时应用程序调用的接口函数,并控制接口函数的执行行为。

具体地,启动计算机的操作系统后,并在用户启动应用程序后,将钩子函数注入到启动的进程内部空间中,以对进程中调用的接口函数进行监控和控制。

例如,在linux系统下,可以采用操作系统下的ld_preload机制完成拦截模块的加载,即将所要拦截的接口函数的处理函数所在库文件的路径写入到/etc/ld.so.preload文件中。

可选地,在本申请实施例提供的应用程序的运行控制方法中,在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作包括:通过钩子函数拦截应用程序调用的第一动态链接库,其中,第一动态链接库中包含第一访问函数,第一访问函数用于访问应用程序实例。

具体地,在计算机的操作系统为linux系统的情况下,访问操作对应的接口函数存储在libc.so库或libdbus.so库中,使用inlinehook技术,对libc.so库中的open函数或libdbus.so库中的dbus_bus_request_name函数进行拦截,以拦截应用程序对应用程序实例的访问操作。

具体地,对于通过检测文件存在与否来判定是否已经有实例在运行的应用程序,拦截应用程序对特定路径下的文件的访问,对于通过检测dbus服务名存在与否来判定是否已经有实例在运行的应用程序,拦截应用程序对dbus服务的内存的访问,从而检查是否有应用程序实例在运行,如果没有应用程序实例运行,则放过拦截,否则对访问操作的访问地址进行重定向,解除应用程序单实例限制,使应用程序可以再次启动,实现应用程序的分身或者应用多开。

步骤s104,将访问操作的访问地址重定向到目标地址,并接收基于目标地址返回的目标访问结果,其中,目标访问结果用于指示不存在应用程序实例。

具体地,将应用程序访问的文件或者dbus服务名进行重定向,以使应用程序去目标地址进行访问操作,接收到不存在应用程序实例的访问结果,从而绕过应用程序的单实例的检测机制,实现应用程序的分身或多开。

为了避免不必要的重定向操作,可选地,在本申请实施例提供的应用程序的运行控制方法中,在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作之后,该方法还包括:判断访问操作的访问地址中是否存在应用程序实例;在存在应用程序实例的情况下,执行将访问操作的访问地址重定向到目标地址的步骤。

也即,在访问操作的访问地址中存在应用程序实例的情况下,再执行将访问操作的访问地址重定向操作,在访问操作的访问地址中不存在应用程序实例的情况下,则不进行执行将访问操作的访问地址重定向操作。

通过动态链接库中的访问函数的替换实现访问地址的重定向,可选地,在本申请实施例提供的应用程序的运行控制方法中,将访问操作的访问地址重定向到目标地址,并接收到基于目标地址返回的目标访问结果包括:控制应用程序获取第二动态链接库中的第二访问函数的目标函数参数,其中,目标函数参数包括访问地址,第二访问函数的访问地址与第一访问函数的访问地址不同;接收第一访问函数基于目标函数参数执行访问行为返回的不存在应用程序实例的访问结果。

需要说明的是,在一个应用程序运行时,需要通过应用程序api接口调用多个模块加载实现程序相应的功能,第一动态链接库和第二动态链接库对应的即为1个模块或n个模块组成的集合,每个函数是运行在某个模块中,一个模块中包含多个api函数,如访问函数,可以通过调整动态链接库中api函数的调用过程,实现访问结果的替换。

在一种可选的实施方式中,第一访问函数为open函数,open函数在第一链接库libc.so库中,要改变open函数的访问地址,就要把第一链接库libc.so库中的open函数截获,例如,设置第二链接库libchook.so,并修改第一链接库libc.so中open函数所在内存空间中的地址,在应用程序调用open函数时,重定向至libchook.so库对应的第二访问函数所在内存空间,也即跳转到第二访问函数所在内存空间执行调用,达到调整访问函数的调用过程的目的。例如,原来要调c盘下的文件,改成调用d盘中的文件,由于d盘中的文件不存在,返回的不存在应用程序实例的访问结果,从而实现访问函数的返回值的替换。

步骤s106,基于目标访问结果控制应用程序完成启动。

具体地,接收第二访问函数执行访问行为返回的不存在应用程序实例的访问结果,允许应用程序的当前次启动。

本申请实施例提供的应用程序的运行控制方法,通过在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作,其中,应用程序实例用于表征应用程序的启动状态;将访问操作的访问地址重定向到目标地址,并接收基于目标地址返回的目标访问结果,其中,目标访问结果用于指示不存在应用程序实例;基于目标访问结果控制应用程序完成启动,解决了相关技术中在linux系统下无法启动并同时运行多个相同的应用程序的问题。通过拦截应用程序对应用程序实例的访问操作,并对访问操作的访问地址进行重定向,进而达到了在linux系统下可以启动并同时运行多个相同的应用程序的效果。

图2是根据本申请实施例的另一种应用程序的运行控制方法的示意图。如图2所示,该方法包括:

在linux系统开机后,运行钩子安装模块,完成hook模块安装。

在用户启动聊天应用或者办公软件,进程启动时,加载拦截处理模块,实现对open、dbus_bus_request_name函数的拦截。

检查系统中运行的程序状态,看是否已经有用户启动程序的实例存在。

若存在,说明程序一启动,则拦截模块调用重定向模块,对文件或dbus的访问进行重定向操作,实现应用的再次启动;若不存在,则拦截模块放过文件或dbus访问请求,用户启动的程序加载运行。

在程序运行过程中,检查是否退出系统,如果是,则退出系统。

通过本实施例,使用inlinehook技术,对libc.so库中的open函数和libdbus.so库中的dbus_bus_request_name函数进行拦截,破解应用程序的单实例检测机制,实现应用程序的分身或者应用多开,满足用户特殊需求。

图3是根据本申请实施例的可选的应用程序的运行控制方法的示意图。如图3所示,该方法包括:

进入linux操作系统后,登录账号系统,验证通过后同步密文控制策略。

在用户双击打开文件的情况下,检查打开的文件是否为密文,如果是,则启动新进程打开密文文件;如果不是,说明为明文,启动明文进程或者使用已经存在的明文进程打开文件。

之后,检查是否退出系统,如果是,则退出系统。

通过本实施例,避免了办公软件打开了密文文件时明文进程已经存在,密文内容可能被明文的拷贝导致泄露的问题,同时避免了在密文进程中,编辑打开的明文,明文会被加密的问题。此外,打开一个密文,再打开密文,如果密级相同,可以打开多个程序,也可以只采用一个程序显示,具体的策略由密文控制策略确定。

需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

本申请实施例还提供了一种应用程序的运行控制装置,需要说明的是,本申请实施例的应用程序的运行控制装置可以用于执行本申请实施例所提供的用于应用程序的运行控制方法。以下对本申请实施例提供的应用程序的运行控制装置进行介绍。

图4是根据本申请实施例的应用程序的运行控制装置的示意图。如图4所示,该装置包括:拦截单元10、重定向单元20和控制单元30。

可选地,拦截单元10,用于在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作,其中,应用程序实例的存在用于表征应用程序已启动。

重定向单元20,用于将访问操作的访问地址重定向到目标地址,并接收基于目标地址返回的目标访问结果,其中,目标访问结果用于指示不存在应用程序实例。

控制单元30,用于基于目标访问结果控制应用程序完成启动。

本申请实施例提供的应用程序的运行控制装置,通过拦截单元10在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作,其中,应用程序实例的存在用于表征应用程序已启动;重定向单元20将访问操作的访问地址重定向到目标地址,并接收基于目标地址返回的目标访问结果,其中,目标访问结果用于指示不存在应用程序实例;控制单元30基于目标访问结果控制应用程序完成启动,解决了相关技术中在linux系统下无法启动并同时运行多个相同的应用程序的问题,通过拦截应用程序对应用程序实例的访问操作,并对访问操作的访问地址进行重定向,进而达到了在linux系统下可以启动并同时运行多个相同的应用程序的效果。

可选地,在本申请实施例提供的应用程序的运行控制装置中,启动单元,用于在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作之前,启动计算机的操作系统,并启动应用程序对应的进程;注入单元,用于将钩子函数注入至启动的进程的内存空间中,其中,钩子函数用于监控进程运行时应用程序调用的接口函数,并控制接口函数的执行行为。

可选地,在本申请实施例提供的应用程序的运行控制装置中,该装置还包括:判断单元,用于在启动计算机的应用程序的过程中,拦截应用程序对应用程序实例的访问操作之后,判断访问操作的访问地址中是否存在应用程序实例;执行单元,用于在存在应用程序实例的情况下,执行将访问操作的访问地址重定向到目标地址的步骤。

可选地,在本申请实施例提供的应用程序的运行控制装置中,拦截单元10用于通过钩子函数拦截应用程序调用的第一动态链接库,其中,第一动态链接库中包含第一访问函数,第一访问函数用于访问应用程序实例。

可选地,在本申请实施例提供的应用程序的运行控制装置中,重定向单元20包括:第一控制模块,用于控制应用程序获取第二动态链接库中的第二访问函数的目标函数参数,其中,目标函数参数包括访问地址,第二访问函数的访问地址与第一访问函数的访问地址不同;接收模块,用于接收第一访问函数基于目标函数参数执行访问行为返回的不存在应用程序实例的访问结果。

可选地,在本申请实施例提供的应用程序的运行控制装置中,应用程序实例所在的地址为以下之一:应用程序的安装路径下的目标文件地址,监管应用程序的目标服务器的内存地址。

可选地,在本申请实施例提供的应用程序的运行控制装置中,计算机的操作系统为linux系统。

所述应用程序的运行控制装置包括处理器和存储器,上述拦截单元10、重定向单元20和控制单元30等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。

处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来解决在linux系统下无法启动并同时运行多个相同的应用程序的问题。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram),存储器包括至少一个存储芯片。

本申请实施例还提供了一种非易失性存储介质,非易失性存储介质包括存储的程序,其中,程序运行时控制非易失性存储介质所在的设备执行一种应用程序的运行控制方法。

本申请实施例还提供了一种电子装置,包含处理器和存储器;存储器中存储有计算机可读指令,处理器用于运行计算机可读指令,其中,计算机可读指令运行时执行一种应用程序的运行控制方法。本文中的电子装置可以是服务器、pc、pad、手机等。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。存储器是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

再多了解一些
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1