2008-09-09 2 views
40

Я знаю, что мы больше не должны использовать реестр для хранения данных приложения, но при обновлении устаревшего приложения (и желании сделать минимальные изменения), какие реестры не разрешены для использования администраторами?Какой доступ к реестру вы можете получить без привилегий администратора?

Могу ли я получить доступ ко всем HKEY_CURRENT_USER (приложение в настоящее время имеет доступ к HKEY_LOCAL_MACHINE) без прав администратора?

+1

«Я знаю, что мы больше не должны использовать реестр для хранения данных приложения» - я не думаю, что это полностью верно. Реестр имеет много преимуществ по сравнению с файловой системой, и я не знаю никаких указаний от Microsoft прекратить использовать его в разработке приложений. Вероятно, вы не должны использовать его для хранения больших объемов данных приложения, но это хорошее место для хранения настроек и данных конфигурации. – syplex 2017-03-02 18:52:47

ответ

64

В общем, пользователь не администратор имеет такой доступ к реестру:

чтения/записи:

  • HKEY_CURRENT_USER

Только для чтения:

  • HKEY_LOCAL_MACHINE
  • HKEY_CLASSES_ROOT (который просто ссылка к HKEY_LOCAL_MACHINE\Software\Classes)

Можно изменить некоторые из этих разрешений на ключе-на ключ, но это крайне редко. Тебе не стоит беспокоиться об этом.

Для ваших целей ваше приложение должно записывать настройки и настройки на HKEY_CURRENT_USER. Каноническое место где-то в пределах HKEY_CURRENT_USER\Software\YourCompany\YourProduct\

Возможно, вы можете провести глобальные настройки (для всех пользователей) в HKEY_LOCAL_MACHINE. Это очень редко нужно делать, и вам следует избегать этого. Проблема в том, что любой пользователь может «читать», но только администратор (или по расширению, ваша программа установки/установки) может «установить» их.

Другой распространенный источник проблем: ваше приложение не должно писать ни о чем в каталогах Program files или Windows. Если вам нужно писать в файлы, есть несколько вариантов; описывая все из них, было бы более продолжительным обсуждением. Все параметры в конечном итоге записываются в подпапку под номером %USERPROFILE% для данного пользователя.

И, наконец, ваша заявка должна оставаться в стороне от HKEY_CURRENT_CONFIG. Этот куст содержит конфигурацию оборудования, конфигурации служб и другие элементы, на которые не нужно смотреть 99,9999% приложений (например, в нем содержится текущий список устройств Plug-and-Play). Если вам что-то нужно, большая часть информации доступна через поддерживаемые API в другом месте.

+2

Спасибо. Сохранял бесплодный поиск в MSDN, хотя ссылка была бы приятной. Это Q & A требует большей экспозиции. – 2017-05-23 05:20:44

3

Да, вы должны иметь возможность писать в любое место под HKEY_CURRENT_USER, не имея привилегий администратора. Но это фактически частный магазин, который никто другой пользователь на этой машине не сможет получить доступ, поэтому вы не можете размещать какую-либо общую конфигурацию там.