Windows 7 повышенный доступ к реестру - PullRequest
3 голосов
/ 09 декабря 2010

Я работаю над установщиком для нашего приложения. Установщик вносит некоторые изменения в раздел реестра HKEY_CURRENT_USER \ Software \ Company \ AppName, который приложение затем просматривает при первом запуске. Затем приложение выполняет разные действия в зависимости от найденных ключей реестра.

Это прекрасно работает, пока вы не попытаетесь установить приложение как учетную запись пользователя (т.е. не администратор) в Windows 7 (и, возможно, Vista, я еще не проверял это).

Когда пользователь пытается установить приложение, Windows повышает учетные данные администратора. Это означает, что любые изменения HKCU в реестре вносятся в реестр администратора, а не в реестр запускающего пользователя. Таким образом, ключи не видны приложению при первом его запуске под учетной записью пользователя.

Мы не можем быть единственными людьми, чей установщик должен общаться с приложением, которое он устанавливает. Нет ли способа надежно использовать реестр для этого?

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

Редактировать: приложению необходимо удалить ключи после их использования, поэтому я не могу просто поместить их в HKEY_LOCAL_MACHINE.

Ответы [ 2 ]

3 голосов
/ 09 декабря 2010

Есть 2 рекомендуемых подхода для того, что вы хотите:

  1. Используйте установку для каждого пользователя, которая не требует прав администратора.Вы сможете использовать HKEY_CURRENT_USER, но ваш продукт установлен не для всех пользователей.

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

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

2 голосов
/ 09 декабря 2010

Если вам нужно, чтобы информация вашего приложения была доступна для всех пользователей, используйте куст HKEY_LOCAL_MACHINE.

EDIT - 2 варианта:

  • Измените безопасность вашего реестраключи, позволяющие пользователям редактировать / удалять их,
  • Используйте каталог ProgramData (вместо реестра) для хранения данных.
...