OpenBaseKey открыть и изменить раздел реестра только для чтения - PullRequest
1 голос
/ 15 апреля 2019

У меня есть раздел реестра, к которому мои пользователи должны иметь доступ в моем приложении VB.NET. Я заметил, что некоторые пользователи системы имеют доступ только для чтения к разделу реестра. Я знаю, как исправить это в regedit. Однако, поскольку это неотъемлемая часть моей программы, мне нужен был способ сделать это прагматично.

Для ключа для учетной записи «Администраторы» установлено значение «Только чтение».

Я могу изменить права, если смогу открыть ключ OpenSubKey.

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 установлено записываемое значение true, а права записаны, я могу открыть и изменить права ключа. Если права только для чтения, я должен установить opensubkey доступный для записи 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

Подпрограмма выполняется администратором.

...