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

Mru*_*nal 0 c++ windows environment-variables

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

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

Lig*_*ica 5

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

你的问题就像问"我所有的家人,我的车在哪个卧室里停车?" 事实上,这辆车安全而稳健地坐在车道外面.

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

C:\Users\tomalak>qwinsta
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           tomalak                   1  Active
Run Code Online (Sandbox Code Playgroud)

不过,这有点像哈克; 通常,您将拥有一个可以与后端服务通信的小型用户空间应用程序,并在应用程序中执行所有特定于用户的恶作剧.