Написание в HKEY_LOCAL_MACHINE из .NET не виртуализируется в Vista или Windows 7?

StackOverflow https://stackoverflow.com/questions/4777228

  •  23-10-2019
  •  | 
  •  

Вопрос

У меня возникают проблемы с пониманием виртуализации виртуальных операций реестра в Vista и/или Windows 7. Я подумал, что пытался написать что -то в Hkey_local_machine root во время работы в качестве стандартного пользователя предложит Windows виртуализировать операцию и записать Hkey_current_user/classes/virtualstore/machine вместо. Я видел, как несколько старых приложений ведут себя точно так.

Однако при попытке воспроизвести это поведение в C# и .NET4, операция записи в HKLM просто терпит неудачу с UnaultorizedAccessException вместо. Есть ли способ заставить виртуализацию?

Чтобы дать какой -то контекст вопросу: я пытаюсь читать и манипулировать ключами реестра, первоначально созданных другим приложением Legacy. В Vista или Windows 7 они будут расположены в VirtualStore. Я хотел бы использовать одну и ту же логику доступа реестра как для Winxp, так и для выше, и думал, что мои операции реестра будут виртуализированы так же, как операции из приложения Legacy (и из -за этого будет работать на одних и тех же ключах). Это не работает так, как ожидалось, и единственный обходной путь, который я знаю, - это специально получить доступ к пути VirtualStore, Если пользователь работает Vista или 7 и включен UAC... Кажется некрасивым, особенно если Microsoft решает изменить поведение виртуализации в будущих версиях Windows.

Это было полезно?

Решение

Статья MSDN Виртуализация реестра в Windows Vista объясняет, что определенные классы процессов отключены виртуализации:

  • 64-битные процессы
  • Исполняемые файлы с запросом, указанным в манифесте
  • и некоторые другие; Проверьте статью для получения подробной информации

Один или оба из первых двух, как правило, верны для приложения .NET (из-за манифеста по умолчанию по умолчанию. Вам придется удалить манифест (так, чтобы ваше приложение выглядело как устаревшее приложение), чтобы включить виртуализацию, но это была бы плохая идея (для совместимости вперед с Windows). Вместо этого просто предположим, что ваше приложение не виртуализируется на Vista (а затем и позже) и продолжается соответственно.

Кроме того, в статье предупреждается, что «Microsoft намерена удалить эту форму виртуализации из будущих версий операционной системы Windows ... Непонжно, что ваше приложение не требует жесткой зависимости от наличия виртуализации в системе». Какой бы код, который вы пишете, должен предвидеть, что ключ VirtualStore может не существовать в будущей версии Windows.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top