我正在处理需要Windows机器上一次登录时间的应用程序。我为此使用了PrincipalContext
。
我正在使用的代码在少数机器上运行,但是在某些机器上UserPrincipal
开始以null返回:
private DateTime? GetLastLogin()
{
PrincipalContext context = new PrincipalContext(ContextType.Machine, Environment.MachineName);
UserPrincipal uc = UserPrincipal.FindByIdentity(context, Environment.UserName);
return uc.LastLogon;
}
该代码在少数计算机上运行良好,但同时在某些计算机上返回UserPrincipal
为null。任何帮助表示赞赏。谢谢!
答案 0 :(得分:0)
此:
new PrincipalContext(ContextType.Machine, Environment.MachineName)
表示要在当前计算机上查找帐户。因此,您将只能找到本地帐户-仅在当前计算机上存在的帐户。
如果用户使用Active Directory帐户登录,则可以,您对FindByIdentity
的调用将不会返回任何内容,因为他们的帐户位于Active Directory中,而不是本地计算机中。
如果您希望当前用户使用UserPrincipal
对象,则可以使用UserPrincipal.Current
:
private DateTime? GetLastLogin()
{
return UserPrincipal.Current.LastLogon;
}
请小心执行几次。每次使用UserPrincipal.Current
时,它都会创建一个新的UserPrincipal
对象,并且第一次使用新的UserPrincipal
对象时,它将消失并与AD对话,这会花费时间。 / p>
因此,明智的做法是保留对从UserPrincipal
获得的UserPrincipal.Current
对象的引用,并在每次需要时引用该对象。