запись sbkey в реестр в vb.net

Я использую следующий код, чтобы открыть, а затем записать подраздел в реестре

Private Sub RegSubKeyCreates(ByVal sKeyPath As String)
      Dim RegKey As RegistryKey
      Dim SubKeyParam() As String = Nothing

      SubKeyParam = Split(sKeyPath, "\")
      RegKey = Registry.CurrentUser.OpenSubKey(SubKeyParam(0), True).OpenSubKey(SubKeyParam(1), True)
      RegKey.CreateSubKey(SubKeyParam(0)).CreateSubKey(SubKeyParam(1))

End Sub

Когда я пытаюсь создать подраздел, я получаю сообщение об ошибке

System.NullReferenceException Ссылка на объект не указывает на экземпляр объекта

Я не могу понять, что происходит. Есть ли кто-нибудь, кто поможет мне в этом?


person Lefteris Gkinis    schedule 08.10.2010    source источник


Ответы (1)


Большое спасибо всем, кто пытается отправить ответ. Но я нашел решение сам. Поэтому я помещаю его здесь на случай, если кто-то еще захочет его увидеть. Решение кроется в менталитете работы с реестром Hive. Необходимо понимать, что вложенные ключи создаются один за другим, только после того, как мы откроем реестр для последнего существующего вложенного ключа. Новый подключ не должен иметь никаких символов до или после такого «подключа», пожалуйста, посмотрите на код.

Private Sub RegSubKeyCreates(ByVal sKeyPath As String)
      Dim RegKey As RegistryKey
      Dim SubKeyParam() As String = Nothing
      Dim UB As Integer
      Dim Bound As Integer
      Dim KeyPath As String

      SubKeyParam = Split(sKeyPath, "\")
      UB = UBound(SubKeyParam)
      For Bound = 0 To UB - 1
           KeyPath = KeyPath + SubKeyParam(Bound) + "\"
      Next
      RegKey = Registry.CurrentUser.OpenSubKey(KeyPath, True)
      RegKey.CreateSubKey(SubKeyParam(UB))

 End Sub

И подсказка, которая ведет к этому:

Select Case RegKeyExists("Software\sKey1")
           Case True
           Case False
                RegSubKeyCreates("Software\skey1")  
                Select Case RegKeyExists("Software\sKey1\sKey2")
                     Case True
                     Case False
                          RegSubKeyCreates("Software\sKey1\sKey2")
                          Select Case RegKeyExists("Software\sKey1\sKey2\sKey3")
                               Case True
                               Case False
                                    RegSubKeyCreates("Software\sKey1\sKey2\sKey3")
                                    Select Case RegKeyExists("Software\skey1\sKey2\sKey3")
                                         Case True
                                              SetRegKeyValue("KeyName", "KeyValue", "TheTotalSubKeyPath")
                                         Case False

                                    End Select
                          End Select
person Lefteris Gkinis    schedule 08.10.2010