2010-01-28 4 views
1

새 appdomain에 코드를 시작하고 코드 키의 일부에서 레지스트리 키를 확인하는 MMC 스냅인을 만들었습니다. 내가 스냅인에서 키를 확인하면 작동하지만 새 appdomain의 코드가 보안 예외를 throw합니다. 콘솔이나 Windows 응용 프로그램에서 새 appdomain에 코드를로드하면 제대로 작동합니다. 여기 MMC 스냅인의 새 AppDomain이 UAC에 대해 상승 된 권한을 얻지 못했습니다.

코드입니다 : 내가 콘솔 또는 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 
    } 
} 

을 유의하시기 바랍니다, 그것을 잘 작동합니다. 이것이 UMC 질문보다 MMC 스냅인 질문에 더 가깝다고 생각합니다.

어떤 통찰력이 많이 주시면 감사하겠습니다 ...

감사합니다,

브래드

답변

0

당신은이 작업을 수행하는 사용자의 워크() 메소드를 변경하면 어떻게 보이나요?

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)); 
} 
+0

첫번째 라인 : WindowsPrincipal 사용자 = (WindowsPrincipal) Thread.CurrentPrincipal; 보안 오류가 발생했습니다. 'System.Security.Permissions.SecurityPermission, mscorlib, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'형식의 사용 권한 요청이 실패했습니다. – BLogan