从WindowsService如何从C#中找到当前登录的用户?

Mar*_*rek 2 c# windows-services

我在管理员帐户下运行Windows服务,我想知道谁是当前登录的用户.它将与当前运行的WindowService帐户不同.有没有简单的方法从c#中获取它?

它不是:System.Security.Principal.WindowsIdentity.GetCurrent()既不是System.Environment.UserName

谢谢

编辑

我感兴趣的是当前使用控制台会话登录的用户.谢谢jadarnel27

我对其他远程会话不感兴趣,因为这不是我的情况.

Dmi*_*try 6

1)Cassia应该能够为您提供当前登录用户的列表,包括RDC.

foreach (ITerminalServicesSession sess in new TerminalServicesManager().GetSessions())
{
    // sess.SessionId
    // sess.UserName
}
Run Code Online (Sandbox Code Playgroud)

2)WMI(SO 答案)

Select * from Win32_LogonSession
Run Code Online (Sandbox Code Playgroud)

3)PInvoke到WTSEnumerateSessions

4)枚举"explorer.exe"的所有实例并使用PInvoke(OpenProcessHandle)获取所有者.

Process[] processes = Process.GetProcessesByName("explorer");
Run Code Online (Sandbox Code Playgroud)

这有点hacky.WMI也可用于此目的.

如果您决定使用使用WMI的解决方案,那么将winmgmt设置为服务的依赖项可能是个好主意.