У меня есть программа, которая интегрируется с контекстным меню проводника. Он работает правильно в Win32, но не в Win64. Я скомпилировал расширение оболочки для Win64, но теперь я хочу зарегистрировать это
Файл DLL из основной программы является 32-разрядным, и я также хочу сохранить основную программу как 32-разрядную.
Я хочу получить доступ к ключу CLSID в Wow6432Node
под HKEY_CLASS_ROOT
, я использовал RegDisableRef
но это не работает
Так же, как файлы перенаправляются WoW64, доступ к реестру также перенаправляется
Перенаправитель реестра изолирует 32-разрядные и 64-разрядные приложения, предоставляя отдельные логические представления определенных частей реестра в WOW64. Перенаправитель реестра перехватывает 32-разрядные и 64-разрядные вызовы реестра для соответствующих логических представлений реестра и сопоставляет их с соответствующим физическим местоположением реестра. Процесс перенаправления прозрачен для приложения. Поэтому 32-разрядное приложение может получать доступ к данным реестра, как если бы оно работало в 32-разрядной Windows, даже если данные хранятся в другом месте в 64-разрядной Windows.
Вам необходимо указать KEY_WOW64_64KEY
на samDesired
параметр при доступе к 64-битным ключам реестра с RegCreateKeyEx
, RegDeleteKeyEx
или же RegOpenKeyEx
Следующие флаги позволяют 32-разрядным приложениям получать доступ к перенаправленным ключам в 64-разрядном представлении реестра, а 64-разрядные приложения — к перенаправленным ключам в 32-разрядном представлении реестра. Эти флаги не влияют на разделенные ключи реестра. Для получения дополнительной информации см. Раздел Ключи реестра, на которые влияет WOW64.
Flag name Value Description KEY_WOW64_64KEY 0x0100 Access a 64-bit key from either a 32-bit or 64-bit application. KEY_WOW64_32KEY 0x0200 Access a 32-bit key from either a 32-bit or 64-bit application. Windows 10 on ARM: This refers to the 32-bit ARM registry view for 32-bit ARM processes and the 32-bit x86 registry view for 32-bit x86 and 64-bit ARM64 processes.
Однако я думаю, что компиляция программы в отдельных 32- и 64-битных версиях будет проще. Большинство программ не нужно менять при перекомпиляции. Более того, вам все равно придется перекомпилировать расширение оболочки, потому что 64-битные процессы не могут загружать 32-битные DLL
Других решений пока нет …