16

コマンドプロンプトで実行する簡単なコンソールアプリケーションは次のとおりです。

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」であり、ID名として空の文字列です。なぜ実行時のGenericPrincipal代わりに構築するのWindowsPrincipalですか?WindowsPrincipal開始プロセス(私の場合はcmd.exe)のセキュリティトークンから構築するように強制するにはどうすればよいですか?

4

1 に答える 1

35

使用する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を参照してください

于 2010-12-12T14:30:17.210 に答える