调试模式下的声明性安全性

时间:2011-09-05 18:09:49

标签: wpf visual-studio-2010

我想使用声明式安全性来保证我的应用程序仅由计算机上的本地管理员运行。例如,

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
    try
    {
        LoadUsers();
    }
    catch (System.Security.SecurityException)
    {
        MessageBox.Show("You must be a local administrator to run this application.");
        System.Environment.Exit(1);
    }
}

// You must be an admin to run this method...
[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]
private void LoadUsers()
{
    // etc.
}

这一切都很好;但是,如果我在没有首先使用“以管理员身份运行”启动IDE的情况下进行调试,那将是很好的。

问题:有没有办法在安全声明属性中解决这个问题?或者我可以使用不同的安全需求?谢谢!

1 个答案:

答案 0 :(得分:0)

我想在这种情况下,对Imperative安全性有更多控制权。在提出安全需求之前,可以看到是否附加了调试器。

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
        try
        {
            // USE IMPERATIVE SECURITY TO ALLOW THE APP TO RUN IN THE DEBUGGER
            if (!Debugger.IsAttached)
            {
                string user = string.Format(@"{0}\{1}", Environment.UserDomainName, Environment.UserName);
                PrincipalPermission permission = new PrincipalPermission(user, @"BUILTIN\Administrators");
                permission.Demand();
            }
            LoadUsers();
        }
        catch (System.Security.SecurityException)
        {
            MessageBox.Show("You must be a local administrator to run this application.");
            System.Environment.Exit(1);
        }
    }

    // NO DECLARATIVE SECURITY DEMAND HERE
    private void LoadUsers()
    {
       // etc.
    }