如何在服务上下文中获取用户名

时间:2014-06-25 12:16:45

标签: c++ windows environment-variables

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

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

1 个答案:

答案 0 :(得分:5)

如果您的程序作为服务运行,则不是“登录用户”。多用户系统的整个概念使得这样的概念毫无意义。可能会有任意数量的用户登录,并且您的程序无法猜出您希望它在哪个帐户下运行。

你的问题就像是问“我所有的家人,我的车在哪个卧室停着?”事实上,这辆车安全而安全地坐在车道外面。

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

C:\Users\tomalak>qwinsta
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           tomalak                   1  Active
但是,这有点骇人听闻;通常你会有一个小的用户空间应用程序可以与后端服务进行通信,并在应用程序中执行所有特定于用户的恶作剧。