获得用户希望

时间:2015-04-15 12:55:29

标签: c# service windows-identity userprincipal

我正在写一项服务,我正在尝试登录用户的sid,无论出于何种原因,它都无法正常工作。它只返回{S-1-5-18}。然而,如果我创建一个快速控制台应用程序,它可以正常工作。

我尝试了两种方法:

WindowsIdentity usr = WindowsIdentity.GetCurrent();
return usr.User

以及:

UserPrincipal.Current.Sid

它们对我的服务都有同样的影响。他们都只返回{S-1-5-18}。然而,在控制台应用程序中,它们都返回完整的用户sid。

导致这种情况的原因是什么?

2 个答案:

答案 0 :(得分:4)

我认为您的服务流程是NT AUTHORITY\SYSTEM.\LOCALSYSTEM。 有关详细信息,请参阅KB 243330

  

SID:S-1-5-18
  名称:本地系统
  描述:操作系统使用的服务帐户。

如果您想从桌面会话中获取SID,您可以选择(使用cassia - nuget-package available):

    ITerminalServicesSession GetActiveSession()
    {
        var terminalServicesSession = default(ITerminalServicesSession);
        var terminalServicesManager = new TerminalServicesManager();
        using (var server = terminalServicesManager.GetLocalServer())
        {
            foreach (var session in server.GetSessions())
            {
                if (session.ConnectionState == ConnectionState.Active)
                {
                    // yep, I know ... LINQ ... but this is from a plain .NET 2.0 source ...
                    terminalServicesSession = session;
                    break;
                }
            }
        }
        return terminalServicesSession;
    }

ITerminalServiceSession - 实例确实包含应根据需要运行的属性SessionId。但请注意,有一些与会话状态相关的警告 - 我不保证我的条件足够,您可能需要根据需要调整ConnectionState的条件。

答案 1 :(得分:0)

这些API将返回执行当前进程的用户的SID,在您的情况下是您的服务。 S-1-5-18NT AUTHORITY\SYSTEM

从零到多用户可以登录到Windows系统(交互式使用:本地或远程):没有单独的“登录用户”。

您需要优化您的要求:您为什么想知道登录用户?

相关问题