2013-07-21 66 views
0

我正在嘗試製作通用函數來設置註冊表用戶權限。無法修改註冊表用戶訪問

的問題是,如果我使用的代碼,然後如果我將允許它再次,它拋出時,試圖讀取此行的主要異常否認了關鍵的fullcontrol ACCES:

Dim RK As RegistryKey = RootKey.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.ChangePermissions Or RegistryRights.ReadKey) 

我這樣調用的程序:

RegEdit.Set_UserAccess_Key("hkcu\appevents", RegistryRights.FullControl, AccessControlType.Deny) 

即工作,之後我稱之爲:

RegEdit.Set_UserAccess_Key("hkcu\appevents", RegistryRights.FullControl, AccessControlType.Allow) 

當我試圖讓一個先前拒絕的例外:

Requested registry access denied 

Acceso denegado al Registro solicitado. 

這是代碼:

''' <summary> 
''' Modify the User permissions of a registry key. 
''' </summary> 
Public Shared Sub Set_UserAccess_Key(ByVal RegKey As String, _ 
            ByVal RegUserAccess As RegistryRights, _ 
            ByVal AccessType As AccessControlType, _ 
            Optional ByVal UserName As String = Nothing) 

    If UserName = Nothing Then UserName = Environment.UserDomainName & "\" & Environment.UserName 

    Dim RootKey As RegistryKey = Get_Root_Key(RegKey) ' Registrykey.Currentuser 
    Dim KeyPath As String = Get_Key_Path(RegKey) ' AppEvents 

    Dim RS As New RegistrySecurity() 
    Dim RK As RegistryKey = RootKey.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.ChangePermissions Or RegistryRights.ReadKey) 

    RS.AddAccessRule(New RegistryAccessRule(UserName, RegUserAccess, InheritanceFlags.None, PropagationFlags.None, AccessType)) 
    RK.SetAccessControl(RS) 
    RK = RootKey.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, RegUserAccess) 
    RK.SetAccessControl(RS) 

End Sub 
+0

這個問題以及「可能重複」的意思與我的問題無關。 – ElektroStudios

回答

0

我寫了一個小程序,前段時間授予完全訪問給定Registry Key。它一直工作得很好。它的代碼就相當於你除了:

RS.AddAccessRule(New RegistryAccessRule(UserName, RegistryRights.CreateSubKey Or RegistryRights.Delete Or RegistryRights.ExecuteKey Or RegistryRights.FullControl Or RegistryRights.ReadKey Or RegistryRights.SetValue Or RegistryRights.WriteKey, AccessControlType.Allow)) 

不知道是否有相對於對代碼進行任何改變(使用的是變量,其內容我不知道)。在任何情況下,請注意,此應用程序在更改安全級別後從未訪問過給定密鑰。該過程是:首先執行以設置對密鑰的完全訪問;一個不同的執行來訪問修改後的密鑰。

+0

感謝您的回答,內容是相同的,除了我使用傳播標誌,但我試圖用代替你的代碼行沒有標誌,仍然無法正常工作,但謝謝 – ElektroStudios

+0

@ElektroHacker說,這段代碼的作品,我已經在不同的條件下進行測試。嘗試在更改安全級別後不要訪問密鑰。重新運行該程序或確保在訪問之前關閉與註冊表的所有連接,並且應該可以正常工作。 – varocarbas