这是一个平凡的控制台应用程序,我在命令提示符下运行:
using System; using System.Threading; namespace Test { internal class Runner { [STAThread] static void Main(string[] args) { Console.WriteLine(Thread.CurrentPrincipal.GetType().Name); Console.WriteLine(Thread.CurrentPrincipal.Identity.Name); } } }
输出为“GenericPrincipal”,空字符串为标识名称.为什么运行时构造GenericPrincipal而不是WindowsPrincipal?如何强制它从启动进程的安全令牌(在我的情况下为cmd.exe)构造WindowsPrincipal?
你必须告诉你的应用程序使用什么PrincipalPolicy.你会添加
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
使您的代码看起来像:
using System; using System.Threading; using System.Security.Principal; namespace Test { internal class Runner { [STAThread] static void Main(string[] args) { AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); Console.WriteLine(Thread.CurrentPrincipal.GetType().Name); Console.WriteLine(Thread.CurrentPrincipal.Identity.Name); } } }
见http://msdn.microsoft.com/en-us/library/system.appdomain.setprincipalpolicy.aspx
原文地址:https://www.jb51.cc/windows/371025.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。