1
我有一个简单的应用程序拆分为三个程序集。一种是允许用户从注册表读取密钥的客户表单。其次是用户登录的授权表单。第三个是一个.dll库,所有方法都在进行实际工作。使用多个程序集时请求主体权限失败
我遵循MSDN教程执行声明性安全检查在这里找到http://msdn.microsoft.com/en-us/library/dswfd229.aspx但仍然没有工作。
创建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()
{
...
}
没什么特别。在我的“授权”组装我有一个要求授权.dll文件方法GUI:
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'用户名进行登录,所以不是这样:( – barjed 2011-05-10 13:25:55
在这种情况下,我不能重新编写代码。是否尝试向btnReadRegistry_Click方法添加代码以验证Thread.CurrentPrincipal在执行时的内容? – 2011-05-10 16:33:59
是的,我用调试器检查过它的内容。 – barjed 2011-05-10 21:19:36