我创建了一个MMC snap,它在新的appdomain中启动代码,部分代码检查注册表项。如果我在快照进程中检查密钥它是否有效,但新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应用程序加载新应用程序域中的代码,它可以正常工作。 我认为这更像是一个MMC管理问题,而不是UAC问题。
非常感谢任何见解......
谢谢,
布拉德
答案 0 :(得分: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));
}