Vb.net OpenBaseKey打开并更改只读注册表项

Vb.net OpenBaseKey打开并更改只读注册表项,vb.net,permissions,registry,Vb.net,Permissions,Registry,我有一个注册表项,我的用户需要在我的VB.NET应用程序中访问该注册表项。我注意到一些用户系统只对注册表项具有只读访问权限。我知道如何在regedit中更正此问题。然而,由于这是我的计划的一个组成部分,我需要一种务实的方法 在密钥上,管理员帐户设置为只读 如果我可以打开子密钥,我可以更改权限 Private Sub Main() Dim ProductKey As String ProductKey = "Software\My Application" Dim App

我有一个注册表项,我的用户需要在我的VB.NET应用程序中访问该注册表项。我注意到一些用户系统只对注册表项具有只读访问权限。我知道如何在
regedit
中更正此问题。然而,由于这是我的计划的一个组成部分,我需要一种务实的方法

在密钥上,管理员帐户设置为只读

如果我可以打开子密钥,我可以更改权限

Private Sub Main()
    Dim ProductKey As String
    ProductKey = "Software\My Application"

    Dim ApplicationsKey As String
    ApplicationsKey = ProductKey & "\Applications"

    Dim AppKey As String
    AppKey = ApplicationsKey & "\MyApp"

    Dim LM As RegistryKey
    LM = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)

    Dim CRKey As RegistryKey
    CKey = LM.OpenSubKey(AppKey, True)
End Sub
如果
opensubkey
设置为writable true且权限为write,我可以打开并更改密钥权限。如果权限是只读的,我必须将
opensubkey
writable设置为false才能打开密钥。如果可写设置为false,则无法更改权限

Dim MyPath As String = "This is where registery key is"
Dim LM As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
Dim MyKey As RegistryKey = LM.OpenSubKey(MyPath, False)
Dim Trip = MyKey.GetAccessControl.AreAccessRulesProtected
If MyKey IsNot Nothing Then
    If Trip = False Then
        MsgBox(MyKey.Name)
    Else
        MsgBox(MyKey.Name & " is read-only")

        'This is where the hicup is. You cannot OpenSubKey/Write=True a key you do not have rights to.
        'You cannot edit the rights if OpenSubKey/Write=False.
        'I have to manually change the users rights in regedit.

    End If
Else
    MsgBox(MyPath & " Not Found.")
End If
该例程正在运行Administrator。

据我所知,在
RegistryHive.CurrentUser
下,它应该可以工作。否则,请使用
以管理员身份运行启动应用程序
确定,它必须在注册表中吗?使用XML文件或
HKEY_LOCAL_机器
hive是安装程序的业务(例如,应用程序路径和常规设置),可能更容易。你的应用程序应该处理
HKEY\U当前用户
hive。用于用户定义的设置。但是,正如djv所说,
应用程序.Settings
(或一些自定义格式)可能是一个更好的选择。如果注册表项不是只读的,它确实可以工作。如果该键是只读的,并且您打开子键(AppKey,True),则会出错。如果OpenSubKey(AppKey,False),则在您尝试设置AccessControl之前不会出错。据我所知,在
RegistryHive.CurrentUser
下,它应该可以工作。否则,请使用
以管理员身份运行启动应用程序
确定,它必须在注册表中吗?使用XML文件或
HKEY_LOCAL_机器
hive是安装程序的业务(例如,应用程序路径和常规设置),可能更容易。你的应用程序应该处理
HKEY\U当前用户
hive。用于用户定义的设置。但是,正如djv所说,
应用程序.Settings
(或一些自定义格式)可能是一个更好的选择。如果注册表项不是只读的,它确实可以工作。如果该键是只读的,并且您打开子键(AppKey,True),则会出错。如果OpenSubKey(AppKey,False),则在尝试设置AccessControl之前不会出错。