新しい 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 スナップインに関する質問だと思います。
どんな洞察も大歓迎です...
ありがとう、
ブラッド