У меня проблемы с пониманием виртуализации VirtualStore операций реестра в Vista и / или Windows 7. Я подумал, что попытка записать что-то в корень HKEY_LOCAL_MACHINE при работе от имени стандартного пользователя заставит Windows виртуализировать операцию и написать вместо этого на HKEY_CURRENT_USER / Classes / VirtualStore / MACHINE. Я видел, как несколько старых приложений ведут себя именно так.
Однако при попытке воспроизвести это поведение в C # и .Net4 операция записи в HKLM просто завершается ошибкой с UnauthorizedAccessException. Есть ли способ принудительно виртуализировать?
Чтобы дать некоторый контекст для вопроса: я пытаюсь читать и управлять ключами реестра, изначально созданными другим устаревшим приложением. В Vista или Windows 7 они будут расположены в VirtualStore. Я хотел бы использовать одну и ту же логику доступа к реестру как для WinXP, так и для более поздних версий, и думал, что мои операции с реестром будут виртуализированы точно так же, как операции из устаревшего приложения (и из-за этого будут работать с теми же ключами). Это работает не так, как ожидалось, и единственный известный мне обходной путь - это специально получить доступ к пути VirtualStore, если пользователь работает под Vista или 7 и имеет включенный UAC ... кажется уродливым, хотя, особенно если Microsoft решает изменить поведение виртуализации в будущих версиях Windows.