2015-03-17 3 views
0

У меня есть 32-разрядная программа, которая пытается получить доступ к ключу, хранящемуся в HKLM \ Software \ Microsoft \ VisualStudio, в 64-разрядной настройке Windows под управлением Windows 8.1.Ошибка виртуализации реестра

Обычно он работает нормально, и он действительно прочитает этот ключ из Software \ Wow6432Node.

Однако у меня есть одна машина (которая не кажется отличной от других), для которой чтение не выполняется. Когда я смотрю на обращения к реестру с Process Monitor, он показывает, что он пытается прочитать его из VirtualStore, и там его нет, таким образом, сбой.

Любая причина, по которой Windows не представляет объединенное представление для моего приложения, как это делается на других установках?

Спасибо, Ману

+0

Перенаправление Wow64 и виртуальный магазин - это две разные вещи. Что именно говорит Process Monitor? (Скопируйте и вставьте текст из соответствующих событий в свой вопрос.) –

+0

В основном я вижу вызов RegOpenKey в HKLM \ Software \ Microsoft с состоянием REPARSE, затем второй вызов RegOpenKey в HKCU \ Classes \ VirtualStore \ Machine \ Software \ Microsoft и оттуда я пытаюсь в своей программе получить доступ к подразделу VisualStudio, а монитор процессов показывает доступ к HKCU \ Classes \ VirtualStore \ Machine \ Software \ Microsoft \ VisualStudio с отсутствующей ключевой ошибкой. Вот и все. Он никогда не смотрит на настоящую запись HKLM \ Software \ Microsoft \ VisualStudio, которая существует. –

+0

ОК, это виртуальный магазин, который связан с UAC, а не с WOW64. Я не уверен в деталях, но я думаю, что это вызвано существованием «HKCU \ Classes \ VirtualStore \ Machine \ Software \ Microsoft», которое, в свою очередь, было вызвано тем, что какое-то программное обеспечение работает в режиме совместимости, пытаясь написать 'HKLM \ Software \ Microsoft' без соответствующих разрешений. Это могло произойти много лет назад; как только ключ существует в виртуальном хранилище пользователя, все дальнейшие ссылки перенаправляются на него. –

ответ

1

Виртуальный магазин представляет собой механизм совместимости, который был введен с UAC, и не имеет прямого отношения к WOW64. Когда программа, которая не заявляет о своей совместимости с Windows Vista, пытается создать ключ или файл, но не имеет доступа к этому, Windows перенаправляет запись в виртуальный магазин. С этого момента попытки открыть этот ключ или файл будут автоматически перенаправлены в виртуальный магазин.

Чтобы избежать перенаправления на ключ или файл виртуального магазина, который может создать другое приложение, используйте манифест, чтобы заявить, что ваше приложение совместимо с Windows Vista.