Dot-Net

.NET 控制台應用程序中的 Thread.CurrentPrincipal

  • December 20, 2013

這是我在命令提示符下執行的一個簡單的控制台應用程序:

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?我如何強制它WindowsPrincipal從啟動程序的安全令牌(在我的情況下為 cmd.exe)建構?

您必須告訴您的應用使用什麼 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://stackoverflow.com/questions/4421971