грешка при създаване на регистър

Моята програма 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