在vb.net中的注册表中写一个sbkey

时间:2010-10-08 06:17:57

标签: vb.net windows registry nullreferenceexception vb.net-2010

我正在使用以下代码打开然后在注册表中编写一个子项

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未将对象引用设置为对象的实例

我无法理解发生了什么。有没有人帮我这个?

1 个答案:

答案 0 :(得分: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