ошибка создания реестра

Моя программа vb.net создает/открывает/редактирует файлы реестра. После разработки, когда я использую программу на другом компьютере, она возвращает ошибку:

Ошибка

Если я импортирую файл реестра на компьютер, программа работает нормально, поэтому я предполагаю, что ошибка как-то связана с созданием файла реестра.

Вот как программа создает файл реестра:

Function createRegistrykey()
    Dim openKey As RegistryKey
    openKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\RobinsonsRetailGroup\LogSettings", True)

    '[SPECIFICATION]
    If (openKey.GetValue("STORENAME") = Nothing) Then
        openKey.SetValue("STORENAME", "RRR", RegistryValueKind.String)
    End If
    If (openKey.GetValue("STORENUMBER") = Nothing) Then
        openKey.SetValue("STORENUMBER", "000", RegistryValueKind.String)
    End If

    '[DEFAULT]
    If (openKey.GetValue("UTILFLR") = Nothing) Then
        openKey.SetValue("UTILFLR", "C:\Util", RegistryValueKind.String)
    End If
    If (openKey.GetValue("GRSFLR") = Nothing) Then
        openKey.SetValue("GRSFLR", "D:\DC\Instances\", RegistryValueKind.String)
    End If
    If (openKey.GetValue("EXPORTFLR") = Nothing) Then
        openKey.SetValue("EXPORTFLR", "C:\Export", RegistryValueKind.String)
    End If
    If (openKey.GetValue("OFFICEIMPFLR") = Nothing) Then
        openKey.SetValue("OFFICEIMPFLR", "C:\Program Files\", RegistryValueKind.String)
    End If
    If (openKey.GetValue("PCMSTBAKFLR") = Nothing) Then
        openKey.SetValue("PCMSTBAKFLR", "C:\BAK", RegistryValueKind.String)
    End If
    If (openKey.GetValue("DBASEBAKFLR") = Nothing) Then
        openKey.SetValue("DBASEBAKFLR", "D:\Backup\Store", RegistryValueKind.String)
    End If
    If (openKey.GetValue("INTBACKUPFLR") = Nothing) Then
        openKey.SetValue("INTBACKUPFLR", "D:\BACKUP", RegistryValueKind.String)
    End If
    If (openKey.GetValue("EXTBACKUPFLR") = Nothing) Then
        openKey.SetValue("EXTBACKUPFLR", "none", RegistryValueKind.String)
    End If

    '[POS]
    If (openKey.GetValue("POSUSER") = Nothing) Then
        openKey.SetValue("POSUSER", "Administrator", RegistryValueKind.String)
    End If
    If (openKey.GetValue("POSPASS") = Nothing) Then
        openKey.SetValue("POSPASS", hashEncoding("isd"), RegistryValueKind.String)
    End If

    If (openKey.GetValue("LOGVIEWERPASS") = Nothing) Then
        openKey.SetValue("LOGVIEWERPASS", hashEncoding("BBOEY"), RegistryValueKind.String)
    End If

    openKey.Close()
    Return vbNull
End Function

Кто-нибудь знает, почему возникает эта ошибка?


person jaa2013    schedule 03.06.2013    source источник
comment
Существует ли ключ SOFTWARE\RobinsonsRetailGroup\LogSettings на этом компьютере?   -  person mclaassen    schedule 03.06.2013
comment
Нет, не сейчас. На моем компьютере для разработки программа создает ключ, если он еще не создан, но на рабочей станции, где программа должна быть развернута, возвращает указанную выше ошибку и не создает никакого ключа.   -  person jaa2013    schedule 03.06.2013


Ответы (1)


Из MSDN о методе RegistryKey.OpenSubKey:

Если запрошенный ключ не существует, этот метод возвращает значение null вместо создания исключения.

Null reference exception на рабочих станциях, где ключ не существует (что происходит при первом вызове GetValue из (пустого) объектаRegistryKey), это совершенно нормально.

'[SPECIFICATION]
    If (openKey.GetValue("S...

Поэтому, прежде чем что-либо делать с ключом, вы должны проверить, является ли он нулевым.

Dim openKey As RegistryKey
    openKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\RobinsonsRetailGroup\LogSettings", True)

If openKey IsNot Nothing
 (...)
Else
 (...)
End if

Если вы хотите создать ключ, если он не существует, вам следует использовать RegistryKey.CreateSubKey метод, который создаст ключ или откроет его для записи, если он уже существует.

Dim openKey As RegistryKey
    openKey = Registry.CurrentUser.CreateSubKey("SOFTWARE\RobinsonsRetailGroup\LogSettings")

Надеюсь это поможет.

person Chris    schedule 03.06.2013
comment
Спасибо, это очень полезно - person jaa2013; 05.06.2013