c++ - Win API GetUserName 返回 SYSTEM
问题描述
我有这种获取当前登录用户的用户名的方法,当我将我的应用程序作为控制台应用程序运行时它工作正常,但是当我将它作为 Windows 服务运行时,它给了我SYSTEM
作为用户名!即使我将我的应用程序作为 Windows 服务运行,有什么想法可以实现我想要的行为吗?
bool GetCurrentUserName(std::wstring& userName)
{
const int INFO_BUFFER_SIZE = 32767;
TCHAR infoBuf[INFO_BUFFER_SIZE] = L"";
DWORD bufCharCount = INFO_BUFFER_SIZE;
if (GetUserName(infoBuf, &bufCharCount))
{
userName = std::wstring(infoBuf);
return true;
}
return false;
}
解决方案
由于可能有 0、1 或更多用户登录,因此您需要LsaEnumerateLogonSessions
. 对于每个用户,调用LsaGetLogonSessionData
以获取用户名。
推荐阅读
- c++ - C++ WinRT32 应用程序上的 WinToast 显示奇怪的错误
- unit-testing - Dart 单元测试给出不一致的结果
- terraform - 使用 for_each 从实例中检索 IP 地址
- maven - Maven Junit 5,Cucumber 未运行测试
- hive - 在 impala 中将文件从一个表传输到另一个表
- sql - 计算日期之间的事件,但日期基于变量“第一个事件”滚动
- java - java - 如何将日期分配给Java中的临时日期字段?
- ios - 如何构建和运行现有的 react-native 应用程序?
- c# - 如何在 WPF 中检查 Mysql 表中是否存在值
- javascript - 如何检查用户是否发送了 json Web 令牌?