首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取用户Sid

获取用户Sid
EN

Stack Overflow用户
提问于 2015-04-15 20:55:29
回答 2查看 1.6K关注 0票数 0

我正在编写一个服务,我试图获取登录的用户的sid,但由于某种原因,它无法工作。它只返回{S-1-5-18}。然而,如果我创建一个快速的控制台应用程序,它就能正常工作。

我尝试了两种方法:

代码语言:javascript
运行
复制
WindowsIdentity usr = WindowsIdentity.GetCurrent();
return usr.User

以及:

代码语言:javascript
运行
复制
UserPrincipal.Current.Sid

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

这可能是什么原因造成的?

EN

回答 2

Stack Overflow用户

发布于 2015-04-15 20:59:33

我假设您正在以NT AUTHORITY\SYSTEM.\LOCALSYSTEM运行您的服务进程。有关更多详细信息,请参阅KB 243330

SID: S-1-5-18

名称:本地系统

说明:操作系统使用的服务帐号。

如果你想从桌面会话中获取SID,你可以这样做(通过使用cassia - nuget-package available):

代码语言:javascript
运行
复制
    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-instance确实包含属性SessionId,它应该根据需要工作。但请注意,与会话状态相关的警告-我不保证我的条件足够,您可能需要根据需要调整ConnectionState上的条件。

票数 4
EN

Stack Overflow用户

发布于 2015-04-15 21:01:21

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

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

你需要改进你的需求:为什么你想知道登录的用户?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29650835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档