加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Thread.CurrentPrincipal在.NET控制台应用程序

发布时间:2020-12-13 20:07:57 所属栏目:Windows 来源:网络整理
导读:这是一个平凡的控制台应用程序,我在命令提示符下运行: using System;using System.Threading;namespace Test{ internal class Runner { [STAThread] static void Main(string[] args) { Console.WriteLine(Thread.CurrentPrincipal.GetType().Name); Consol
这是一个平凡的控制台应用程序,我在命令提示符下运行:
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读