Проблема со значением ключа реестра VB6 - PullRequest
2 голосов
/ 13 января 2011

В VB6 я использовал следующий код для добавления в реестр:

Dim x As Object
x = CreateObject("WScript.Shell")
x.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell", "MADNESS"

Он создает ключ, однако в следующем месте:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell

Вместо:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 13 января 2011

Вы можете использовать оболочку C:\Windows\System32\cscript.exe, которая является версией x64.

К вашему сведению: версия x86: C:\Windows\SysWOW64\cscript.exe

0 голосов
/ 14 января 2011

Во-первых, я перестал бы использовать WScript.Shell и переключился бы на этот класс доступа к реестру: http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=70915&lngWId=1

Поначалу это немного сбивает с толку, но оно надежное и обеспечивает встроенную поддержку доступа к 64-битным записям реестра, а не перенаправленному Wow6432Node. Вы можете сделать это просто, установив желаемый доступ в методе .Path класса. Вот непроверенный пример:

Dim objRegistry as New UniRegistry
Dim objHKLMStartup as New UniRegistry

Set objHKLMStartup = objRegistry.Path([hKey Local Machine], "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", [Registry: Read] + [Registry: WOW64 64-bit])

Затем можно использовать Для каждого варианта В objHKLMStartup для извлечения любых / всех значений в указанном пути реестра.

0 голосов
/ 13 января 2011

Похоже, это потому, что у вас есть 64-битная ОС, и вы используете 32-битное (x86) приложение, которое обрабатывается функцией Windows "Windows On Windows" (WOW).По сути, он позволяет запускать программу x86 в ОС x64 Windows.Программы x86 обычно имеют собственную структуру ключей реестра (т. е. Wow6432Node) и собственную папку программных файлов (т. е. Program Files (x86)).Вы можете попробовать использовать что-то вроде this , которое использует перехватчики WinAPI.Это может позволить вам обойти проблему и написать прямо на ключ, который вы хотите.Хотя я не уверен, что в Windows есть меры безопасности, которые не позволяют приложениям x86 записывать данные в разделы реестра x64.(Я не понимаю, почему это так.)

...