У меня есть раздел реестра, к которому мои пользователи должны иметь доступ в моем приложении 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
Подпрограмма выполняется администратором.