一种运行应用程序的方法和装置制造方法及图纸

技术编号:37123228 阅读:16 留言:0更新日期:2023-04-01 05:19
本申请公开了一种运行应用程序的方法和装置,该方法包括以下步骤:获取当前登录账户的会话信息;通过所述会话信息获取所述当前登录账户的主令牌;根据所述主令牌运行目标应用程序。本申请实施例通过获取当前登录账户的会话信息和主令牌,从而能够使用当前登录账户的权限运行目标应用程序,解决由于Windows服务程序与当前登录账户权限不一致而引发的问题。程序与当前登录账户权限不一致而引发的问题。程序与当前登录账户权限不一致而引发的问题。

【技术实现步骤摘要】
一种运行应用程序的方法和装置


[0001]本申请属于计算机
,具体涉及一种运行应用程序的方法和装置。

技术介绍

[0002]Microsoft Windows服务(过去称为NT服务)允许用户创建可在其自身的Windows会话中长时间运行的可执行应用程序,可以在计算机启动时自动启动,还可以暂停和重新启动而且不显示任何用户界面。Microsoft Windows服务非常适合在服务器上使用,或在任何时候都为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用,还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。
[0003]然而,注册为Windows服务的应用程序只能被特殊的账户(Windows系统内置,名称是“SYSTEM”,该账户由Windows系统管理,无法被计算机用户使用)运行,不同于Windows普通账户(计算机用户使用Windows系统时登录的账户)。因此,被Windows服务所运行的应用程序所获取权限与当前登录账户的权限并不一致,使得Windows服务无法运行相应的应用程序,导致在一些场景下会出现问题。例如,在Windows服务所运行的应用程序要访问普通账户网络挂载目录时,会出现找不到访问目录的问题。
[0004]申请内容
[0005]本申请实施例的目的是提供一种运行应用程序的方法和装置,以解决Windows服务无法运行与当前登录账户对应的应用程序的缺陷。
[0006]为了解决上述技术问题,本申请是这样实现的:
[0007]第一方面,提供了一种运行应用程序的方法,包括以下步骤:
[0008]获取当前登录账户的会话信息;
[0009]通过所述会话信息获取所述当前登录账户的主令牌;
[0010]根据所述主令牌运行目标应用程序。
[0011]第二方面,提供了一种运行应用程序的装置,包括:
[0012]第一获取模块,用于获取当前登录账户的会话信息;
[0013]第二获取模块,用于通过所述会话信息获取所述当前登录账户的主令牌;
[0014]运行模块,用于根据所述主令牌运行目标应用程序。
[0015]本申请实施例通过获取当前登录账户的会话信息和主令牌,从而能够使用当前登录账户的权限运行目标应用程序,解决由于Windows服务程序与当前登录账户权限不一致而引发的问题。
附图说明
[0016]图1是本申请实施例提供的一种运行应用程序的方法流程图;
[0017]图2是本申请实施例提供的一种运行应用程序的装置的结构示意图。
具体实施方式
[0018]下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0019]作为多作业系统,Windows系统除了协调应用程序的执行、分配内存、管理资源之外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application),所以便称之为Application Programming Interface,简称API函数。WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。
[0020]基于现有技术出现的问题,本申请实施例提供了一种实现Windows服务使用当前登录账户权限运行程序的方法,即,提供一个可注册为Windows服务的程序,此程序通过调用Windows提供的获取当前登录账户会话“WTSEnumerateSessionsW”、“WTSGetActiveConsoleSessionId”和通过会话获取当前登录账户令牌“WTSQueryUserToken”、“DuplicateTokenEx”等API获取令牌,然后使用此令牌通过“CreateProcessAsUserW”调用所要执行的程序。这样便实现了Windows服务使用当前登录账户权限运行程序的方法。
[0021]其中,“WTSEnumerateSessionsW”用于检索远程桌面会话主机(RD会话主机)服务器上的会话列表;“WTSGetActiveConsoleSessionId”用于检索控制台会话的会话标识符,控制台会话是当前附加到物理控制台的会话,必须运行远程桌面服务才能成功运行;“WTSQueryUserToken”用于获取会话ID指定的登录用户的主要访问令牌,若要成功调用此函数,调用应用程序必须在LocalSystem帐户的上下文中运行,并且具有SE_TCB_NAME权限;“DuplicateTokenEx”用于创建一个新的访问令牌,用于复制现有令牌,可以创建主令牌或模拟令牌;“CreateProcessAsUserW”用于创建新的进程及其主线程,新进程在由指定令牌表示的用户的安全上下文中运行;“CreateProcessW”用于创建新的进程及其主线程,新进程在调用进程的安全上下文中运行。
[0022]下面结合附图,通过具体的实施例及其应用场景对本申请实施例提供的运行应用程序的方法进行详细地说明。
[0023]如图1所示,为本申请实施例提供的一种运行应用程序的方法流程图,该方法包括以下步骤:
[0024]步骤101,获取当前登录账户的会话信息。
[0025]具体地,可以通过调用应用程序接口“WTSEnumerateSessionsW”,获取所有当前系统会话信息;若存在状态为活跃的会话信息,则将该会话信息作为当前登录账户的会话信息;若不存在状态为活跃的会话信息,则通过调用应用程序接口“WTSGetActiveConsoleSessionId”,获取当前登录账户的会话信息。
[0026]步骤102,通过所述会话信息获取所述当前登录账户的主令牌。
[0027]具体地,可以通过调用应用程序接口“WTSQueryUserToken”,获取当前登录账户的主令牌。
[0028]步骤103,根据所述主令牌运行目标应用程序。
[0029]具体地,可以通过调用应用程序接口“DuplicateTokenEx”,对所述主令牌进行复制;通过调用应用程序接口“CreateProcessAsUserW”,使用复制得到的令牌运行目标应用程序。
[0030]本实施例中,在获取当前登录账户的会话信息之前,还可以读取配置项,根据所述配置项确定需要使用当前登录账户的权限运行所述目标程序。
[0031]本申请实施例通过获取当前登录账户的会话信息和主令牌,从而能够使用当前登录账户的权限运行目标应用程序,解决由于Windows服务程序与当前登录账户权限不一致而引发的问题。
[0032]在本申请实施例中,在安装程序时,安装脚本会自动将该程序注本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种运行应用程序的方法,其特征在于,包括以下步骤:获取当前登录账户的会话信息;通过所述会话信息获取所述当前登录账户的主令牌;根据所述主令牌运行目标应用程序。2.根据权利要求1所述的方法,其特征在于,所述获取当前登录账户的会话信息之前,还包括:读取配置项,根据所述配置项确定需要使用当前登录账户的权限运行所述目标程序。3.根据权利要求1所述的方法,其特征在于,所述获取当前登录账户的会话信息,具体包括:通过调用应用程序接口“WTSEnumerateSessionsW”,获取所有当前系统会话信息;若存在状态为活跃的会话信息,则将该会话信息作为当前登录账户的会话信息;若不存在状态为活跃的会话信息,则通过调用应用程序接口“WTSGetActiveConsoleSessionId”,获取当前登录账户的会话信息。4.根据权利要求1所述的方法,其特征在于,所述通过所述会话信息获取所述当前登录账户的主令牌,具体包括:通过调用应用程序接口“WTSQueryUserToken”,获取当前登录账户的主令牌。5.根据权利要求1所述的方法,其特征在于,所述根据所述主令牌运行目标应用程序,具体包括:通过调用应用程序接口“DuplicateTokenEx”,对所述主令牌进行复制;通过调用应用程序接口“CreateProcessAsUserW”,使用复制得到的令...

【专利技术属性】
技术研发人员:刘璇王玉东
申请(专利权)人:北京易华录信息技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1