Я поставлен в тупик из-за проблемы с реестром Windows 7, и хотя различные вопросы и ответы помогают мне в этом, ничто из того, что я видел, не касается моей конкретной проблемы. Я не знаю, влияют ли другие версии Windows на эту проблему, но у всех нас есть машины win7x64.
У нас есть широкий спектр инструментов, немного C ++, немного C #, немного python (2.6) и т. Д. Мы также используем 32- и 64-битные инструменты. В прошлом мы счастливо хранили информацию реестра в HKLM
. Мы работали над перемещением вещей в HKCU
. У нас было много дискуссий о том, стоит ли это делать, влияет ли это на UAC
и т. Д. Мы действительно хотим попытаться сделать это. Это сказало:
У нас проблемы с чтением / записью ключей реестра из HKCU/software/CompanyABC/App
. У нас есть настройка app
write на python, которая записывает ключи реестра в указанное место, используя _winreg
. Независимо от того, указываем мы KEY_WRITE
| KEY_WOW64_32KEY
или просто KEY_WRITE, значения записываются в HKCU/Software/WOW6432Node/companyABC/app
. Хорошо.
Тогда у меня есть приложение на C #, которое пытается прочитать эти значения. Используя Microsoft.Win32.Registry
, я открываю подраздел ('HKCU / Software / CompanyABC / app') и не вижу свои значения. Оказывается, я вижу следующее поведение:
- При чтении / записи ключей реестра из
HKLM
все это просто работает. Приложение python запишет в HKLM/Softare/Wow6432Node/CompanyABC/app
, а код C # будет считан из этого места. Это все также имеет смысл, учитывая, как мы создаем наши приложения на C # и записываем значения реестра через python
- Чтение / запись значений реестра из HKCU, я получаю другое поведение. Функции
_winreg
будут записывать в HKCU/Sofrware/Wow6432Node/CompanyABC/app
, а приложение C # будет читать из HKCU/Software/CompanyABC/app
. Приложение C # построено как приложение x86 (не любой процессор и не x64), поэтому я предположил, что приложение будет правильно перенаправлено на wow6432Node
, но это не так.
после некоторого расследования выясняется, что HKCU/Software
отличается. Эта статья указывает на то, что эта область является «общей» и не перенаправлена. Если это так, то я не могу понять, почему наше приложение на Python (опять-таки, с помощью _winreg) пишет в расположение в HKCU, которое использует Wow6432Node
- кажется, что оно должно записываться без перенаправления. Я полагаю, что это может быть ошибка в _winreg
.
Я действительно хочу избежать использования WOW6432Node
явно в наших инструментах, но это то, где я нахожусь сегодня. Может кто-нибудь объяснить мне, как я могу сделать, чтобы доступ к реестру из 32- и 64-битных процессов в HKCU
работал правильно, не прибегая к жестко закодированным путям в 32-битном кусте?