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