1

新しい appdomain でコードを起動し、コードの一部でレジストリ キーをチェックする MMC スナップインを作成しました。スナップ イン プロセスでキーをチェックすると機能しますが、新しい appdomain のコードはセキュリティ例外をスローします。コンソールまたは Windows アプリから新しいアプリ ドメインにコードを読み込むと、正常に動作します。

コードは次のとおりです。

public class SimpleMMCSnapIn : SnapIn  
{  
    public SimpleMMCSnapIn()
    {
        RegistryKey archerKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft", true); //this call works

        Evidence baseEv = AppDomain.CurrentDomain.Evidence;
        Evidence newEv = new Evidence(baseEv);

        AppDomainSetup setup = new AppDomainSetup { ApplicationBase = "<pathtobin>" };

        AppDomain domain = AppDomain.CreateDomain("MigratorDomain", newEv, setup);
        domain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

        IWork migrator = (IWork)domain.CreateInstanceAndUnwrap("CheckRegistry", "CheckRegistry.CheckRegistry");

        migrator.Work();
    }
}

[Serializable]  
public class CheckRegistry : MarshalByRefObject, IWork  
{  
    public void Work()  
    {  
        RegistryKey archerKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft", true); //this call throws a security exception
    }  
}

コンソールまたは Windows アプリから新しいアプリドメインにコードをロードすると、正常に動作することに注意してください。これは、UAC に関する質問というよりは、MMC スナップインに関する質問だと思います。

どんな洞察も大歓迎です...

ありがとう、

ブラッド

4

1 に答える 1

0

これを行うために Work() メソッドを変更するとどうなりますか?

WindowsPrincipal user = (WindowsPrincipal)Thread.CurrentPrincipal;
if ( user.IsInRole(WindowsBuiltInRole.Administrator) )
{
    MessageBox.Show(string.Format("{0} is an Administrator", user.Identity.Name));
}
else
{
    MessageBox.Show(string.Format("{0} is NOT an Administrator", user.Identity.Name));
}
于 2010-01-28T19:00:29.353 に答える