У меня есть 32-разрядная программа, которая пытается получить доступ к ключу, хранящемуся в HKLM \ Software \ Microsoft \ VisualStudio, в 64-разрядной настройке Windows под управлением Windows 8.1.Ошибка виртуализации реестра
Обычно он работает нормально, и он действительно прочитает этот ключ из Software \ Wow6432Node.
Однако у меня есть одна машина (которая не кажется отличной от других), для которой чтение не выполняется. Когда я смотрю на обращения к реестру с Process Monitor, он показывает, что он пытается прочитать его из VirtualStore, и там его нет, таким образом, сбой.
Любая причина, по которой Windows не представляет объединенное представление для моего приложения, как это делается на других установках?
Спасибо, Ману
Перенаправление Wow64 и виртуальный магазин - это две разные вещи. Что именно говорит Process Monitor? (Скопируйте и вставьте текст из соответствующих событий в свой вопрос.) –
В основном я вижу вызов RegOpenKey в HKLM \ Software \ Microsoft с состоянием REPARSE, затем второй вызов RegOpenKey в HKCU \ Classes \ VirtualStore \ Machine \ Software \ Microsoft и оттуда я пытаюсь в своей программе получить доступ к подразделу VisualStudio, а монитор процессов показывает доступ к HKCU \ Classes \ VirtualStore \ Machine \ Software \ Microsoft \ VisualStudio с отсутствующей ключевой ошибкой. Вот и все. Он никогда не смотрит на настоящую запись HKLM \ Software \ Microsoft \ VisualStudio, которая существует. –
ОК, это виртуальный магазин, который связан с UAC, а не с WOW64. Я не уверен в деталях, но я думаю, что это вызвано существованием «HKCU \ Classes \ VirtualStore \ Machine \ Software \ Microsoft», которое, в свою очередь, было вызвано тем, что какое-то программное обеспечение работает в режиме совместимости, пытаясь написать 'HKLM \ Software \ Microsoft' без соответствующих разрешений. Это могло произойти много лет назад; как только ключ существует в виртуальном хранилище пользователя, все дальнейшие ссылки перенаправляются на него. –