[英]Getting User Sid
我正在编写服务,并且试图获取登录的用户sid,并且无论出于何种原因它都无法正常工作。 它仅返回{S-1-5-18}。 但是,如果我创建一个快速的控制台应用程序,它就可以正常工作。
我尝试了2种方法:
WindowsIdentity usr = WindowsIdentity.GetCurrent();
return usr.User
以及:
UserPrincipal.Current.Sid
他们对我的服务都有相同的影响。 他们俩都只返回{S-1-5-18}。 然而,在控制台应用程序中,它们都返回完整的用户sid。
是什么原因造成的?
我想您正在以NT AUTHORITY\\SYSTEM
或.\\LOCALSYSTEM
形式运行服务进程。 请参阅知识库文章243330 :
SID:S-1-5-18
名称:本地系统
说明:操作系统使用的服务帐户。
如果您想从桌面会话中获取SID,则可以例如(通过使用cassia - nuget-package可用 ):
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
上的条件。
这些API将返回执行当前进程的用户的SID,如果您使用的是您的服务。 S-1-5-18
是NT AUTHORITY\\SYSTEM
。
可以有零个到登录到Windows系统的许多用户(供交互式使用:本地或远程),从零开始:没有单一的“登录用户”。
您需要完善您的需求:为什么要了解登录用户?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.