2010-12-12 98 views
13

這裏是我在命令提示運行瑣碎控制檯應用程序:在Thread.CurrentPrincipal中.NET控制檯應用程序

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

+0

當查詢'的WindowsIdentity電流= WindowsIdentity.GetCurrent()您能得到什麼;'? – 2010-12-12 14:01:33

+1

它返回我當前的Windows身份,如我所料。那麼我是否有責任去建立和重視校長?或者有一種方法可以在配置文件中指定它,就像ASP.NET或WCF應用程序中的安全設置一樣? – UserControl 2010-12-12 14:11:17

回答

29

你必須告訴你的應用使用什麼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

相關問題