VB.NET читать реестр - PullRequest
       1

VB.NET читать реестр

4 голосов
/ 05 августа 2011

Вне этого недоумение ...

Самая простая строка кода работает иногда, иногда нет.Сначала я подумал, что проблема в том, что я пытался прочитать значение DWORD, но, поскольку я МОГУ читать значения DWORD из НЕКОТОРЫХ ключей, это не должно быть проблемой.Теперь проблема в том, что я не могу прочитать с ЛЮБОГО ключа, если ключ имеет пробел в имени.Конечно, этого не может быть.Я отказываюсь верить, что MS не учитывает пробелы в путях и именах ключей реестра.

Так скажите мне, почему это не работает:

MsgBox(My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\CA\CA ARCserve D2D\WebService", "Port", Nothing))

Это просто выскакивает пустоекоробка.И да, значение существует в реестре, и да, у меня есть разрешение на чтение ключа.

РЕДАКТИРОВАТЬ: Да, снова и снова кажется, что вы не можете читать из реестра, если естьпробелы в любом месте имени ключа.Серьезно?!?

ИЗМЕНИТЬ СНОВА: "Ramhound" говорит, что примеры кода глупы.Увлекательная точка зрения.Однако его собственное предложение также провалилось:

Dim key As RegistryKey = Registry.LocalMachine.OpenSubKey ("ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ ATI Technologies \ CBT")

Dim objValue As Object

objValue= key.GetValue ("ReleaseVersion")

MsgBox (objValue.ToString ())

Ответы [ 2 ]

7 голосов
/ 05 августа 2011

После целого дня, потраченного впустую, решение состоит в том, чтобы установить для вашего проекта VS значение «любой процессор» в дополнительных параметрах компиляции, поскольку, если установлено значение x86 и работает на 64-битной ОС, вы ограничены «Wow6432node» в реестре.

2 голосов
/ 11 декабря 2013

Стоит также отметить, что в 64-битной версии Windows 7 при запуске приложения vb.net в 32-битном режиме ключ Wow6432Node скрыт от вас при использовании объекта Microsoft.Win32.RegistryKey. Я написал этот код, чтобы проверить, какой ключ мне нужно прочитать, чтобы получить правильный подраздел драйвера ODBC:

Dim myReg As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine
    Dim myReg_Key As Microsoft.Win32.RegistryKey

    myReg_Key = myReg.OpenSubKey("SOFTWARE")
    strRegistry_Keys = myReg_Key.GetSubKeyNames()
    bool64_Bit_OS = False

    For Each strSub_Key As String In strRegistry_Keys
        If strSub_Key = "Wow6432Node" Then
            bool64_Bit_OS = True
        End If
    Next

Когда вы выполняете GetSubKeyNames () для клавиши «ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ», вы перенаправляетесь на ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Wow6432Node

Это облегчает мой код, так как теперь мне не нужно определять, какой подраздел искать, чтобы найти, какой драйвер Oracle ODBC использовать.

Kristian

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...