如何从Windows服务获取指定用户的环境变量?

时间:2016-07-24 08:51:15

标签: c++ windows visual-studio

我写了一个Windows服务。它在系统级别运行。我使用以下代码来获取登录用户的用户名。但我想为该用户会话获取一个环境变量。我怎样才能做到这一点?

DWORD sessionId = WTSGetActiveConsoleSessionId();
qInfo() << "session id = " << sessionId;

wchar_t* ppBuffer[100];
DWORD bufferSize;
WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, sessionId, WTSUserName, ppBuffer, &bufferSize);
qInfo() << "Windows User Name = " << QString::fromWCharArray(*ppBuffer);

1 个答案:

答案 0 :(得分:1)

使用WTSQueryUserToken()获取所需会话ID的登录用户令牌,然后将该令牌传递给CreateEnvironmentBlock()以获取该用户的环境变量。

然后,您可以根据需要解析这些字符串,或将它们(和令牌)传递给 CreateProcessAsUser()以用户在会话中启动程序。