Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理多个程序集时,请求主体权限失败_C#_.net_Security_Principal - Fatal编程技术网

C# 处理多个程序集时,请求主体权限失败

C# 处理多个程序集时,请求主体权限失败,c#,.net,security,principal,C#,.net,Security,Principal,我将一个简单的应用程序拆分为三个程序集。一种是客户端表单,允许用户从注册表读取密钥。第二个是用户登录时使用的授权表单。第三个是一个.dll库,其中包含所有实际工作的方法 我遵循了MSDN教程,在这里找到了执行声明性安全检查的方法,但有些方法仍然不起作用 我创建的GenericPrincipal对象如下: public static void CreatePrincipal(string user) { GenericIdentity MyIdentity = ne

我将一个简单的应用程序拆分为三个程序集。一种是客户端表单,允许用户从注册表读取密钥。第二个是用户登录时使用的授权表单。第三个是一个.dll库,其中包含所有实际工作的方法

我遵循了MSDN教程,在这里找到了执行声明性安全检查的方法,但有些方法仍然不起作用

我创建的GenericPrincipal对象如下:

    public static void CreatePrincipal(string user)
    {
        GenericIdentity MyIdentity = new GenericIdentity(user);

        String[] MyString = { "Administrator", "User" };

        GenericPrincipal MyPrincipal =
            new GenericPrincipal(MyIdentity, MyString);

        Thread.CurrentPrincipal = MyPrincipal;
    }
这位于.dll程序集中的CustomPrincipal类中

在同一程序集中,我有一个RegistryOperations类,其方法如下:

    [PrincipalPermissionAttribute(SecurityAction.Demand, Name = "admin1", Role = "User")]
    public static string ReadDeclarative()
    {
      ...
    }
没什么特别的。在我的“授权”程序集中,我有一个GUI,它调用.dll方法进行授权:

    private void btnLogin_Click(object sender, EventArgs e)
    {
        CustomPrincipal.CreatePrincipal(txtUsername.Text);
    }
最后,在第三个“客户端”程序集中,我调用.dll方法读取注册表项:

    private void btnReadRegistry_Click(object sender, EventArgs e)
    {
        txtContents.Text = RegistryOperations.ReadDeclarative();
    }

这不管用。我通过授权程序集登录,当我尝试读取注册表时,我得到的主体权限请求失败。Visual Studio建议将程序集添加到某种神秘的完全信任列表中,但现在可以在VS2010中找到。请告知。

当您登录时,是否使用用户名
admin1
?(如果您不打算在权限验证中检查匹配的用户名,则应将其从需求中删除。)

我确实打算检查匹配的用户名以进行测试。我是用“admin1”用户名登录的,所以不是这样:(在这种情况下,我无法重新编程。您是否尝试过在执行Thread.CurrentPrincipal时向BTNReAddressry\u Click方法添加代码以验证其内容?是的,我已使用调试器对其进行了检查。内容就在那里。