Dot-Net
.NET 控制台應用程序中的 Thread.CurrentPrincipal
這是我在命令提示符下執行的一個簡單的控制台應用程序:
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>