【问题标题】:how can i get username in service context如何在服务上下文中获取用户名
【发布时间】:2014-08-16 00:04:53
【问题描述】:

我想扩展用户特定的环境变量。我有那个“ExpandEnvironmentStringsForUser”的API。我的代码在服务上下文中运行。我想获取当前登录的用户。每当我使用 GetUserName API 时,它都会返回“SYSTEM”。

我的问题是我想在用户特定模式而不是系统模式下扩展 %temp%。 当我的代码在服务上下文中运行时,有什么方法可以获取当前登录的用户?

【问题讨论】:

  • 您确实意识到,除了用于运行服务的用户(通常是 SYSTEM)之外,服务不会与用户会话交互,不是吗?

标签: c++ windows environment-variables


【解决方案1】:

如果您的程序作为服务运行,那么没有“登录用户”。多用户系统的整个概念使这样的概念毫无意义。可能有任意数量的用户登录,您的程序不可能猜出您希望它假装在哪个用户下运行。

您的问题就像是在问“我所有的家庭成员中,我的车目前停在谁的卧室?”事实上,这辆车已经安全而清醒地坐在外面的车道上。

您可以使用qwinsta 命令(终端服务的一部分)来获取当前登录用户的列表,并对其进行处理;它与您的服务完全无关,但在某些一次只允许一个交互式会话(出于许可原因)的 Windows 系统上,它将是唯一一个标记为Active

C:\Users\tomalak>qwinsta
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           tomalak                   1  Active

不过,这有点 hacky;通常,您会有一个小的用户空间应用程序,它可以与后端服务通信,并在应用程序中执行所有特定于用户的恶作剧。

【讨论】:

    猜你喜欢
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多