【问题标题】:Get current Windows user — not current user running process获取当前 Windows 用户——不是当前用户运行的进程
【发布时间】:2017-02-01 07:25:20
【问题描述】:

如何获取当前登录的Windows用户?我的问题:我正在运行一个具有管理员权限的进程以及所有这些:

Console.WriteLine(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
Console.WriteLine(Environment.UserName);
Console.WriteLine(System.Security.Principal.WindowsIdentity.GetCurrent().User); //GUID
Console.WriteLine(Environment.GetEnvironmentVariable("USERNAME"));

...尝试将运行 进程的当前用户还给我,在我的情况下为 Administrator - 但我想拥有 当前用户谁登录了

有什么想法或建议吗?

【问题讨论】:

  • @UweKeim 不知道这是怎么重复的
  • “我正在以管理员权限运行一个进程” - 你的意思是该进程正在运行提升?这是什么操作系统,因为当我添加 app.manifest 并为我的测试应用程序包含 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 时,它运行提升但仍正确显示 my name 而不是“管理员" 或类似的
  • @MickyD - 那是因为您拥有管理员权限。如果您以非管理员身份运行,那么提升还会提示您输入备用用户名和密码。你可以看到我在答案底部链接的 Raymond Chen 文章中讨论的那种事情。
  • @Damien_The_Unbeliever 啊谢谢 Damien :)

标签: c# windows process active-directory


【解决方案1】:

我很久以前就发现了这个方法。我正在使用WMI query

ManagementObjectSearcher searcher = 
     new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");

ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];

【讨论】:

【解决方案2】:

我相信正确的方法是执行WTSQuerySessionInformation,类似于:

WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE,WTS_CURRENT_SESSION,
                           WTSUserName,buffer, out byteCount);

PInvoke此功能的页面。


切线相关,但可能感兴趣 - How can I launch an unelevated process from my elevated process and vice versa?

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2010-10-19
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    相关资源
    最近更新 更多