Не удается прочитать данные конфигурации из HKEY_LOCAL_MACHINE в Vista - PullRequest
2 голосов
/ 22 апреля 2010

У нас есть приложение Java Web Start, и мы пытаемся сохранить данные конфигурации приложения, используя HKEY_LOCAL_MACHINE вместо HKEY_CURRENT_USER. Мы можем попросить кого-то с правами администратора запустить приложение в первый раз и настроить конфигурацию, чтобы оно успешно сохраняло значения в реестре. Тем не менее, последующие пользователи Vista без прав администратора не могут даже прочитать значения из реестра в HKEY_LOCAL_MACHINE.

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

Ответы [ 3 ]

3 голосов
/ 25 июня 2011

Вероятно, на вашу программу влияет виртуализация реестра .

Если 32-разрядная программа пытается выполнить запись в реестр в HKLM\SOFTWARE, а разрешения не позволяют выполнить запись успешно, запускается виртуализация. В программе сообщается, что запись прошла успешно, и данные фактически записано в HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE. Затем, когда 32-разрядная программа пытается прочитать данные из реестра, в папку возвращаются значения из папки VirtualStore. Таким образом, программа обманом полагает, что она успешно записала в местоположение, для которого у нее нет разрешений, и 32-разрядные программы продолжают работать в Vista / Windows 7 без изменений.

Кроме того, из-за UAC пользователь с правами администратора будет рассматриваться, как если бы он был пользователем без прав администратора, если только рассматриваемая программа специально не запускается для запуска с правами администратора. Программы установки должны запускаться с правами администратора, чтобы они могли писать в область HKLM.

1 голос
/ 23 апреля 2010

Обычно вы используете java.util.Preferences для хранения данных приложения на клиентском компьютере. На компьютерах с Windows это будет скрытно записываться в реестр Windows. Вот учебник / руководство Sun и более техническая статья о предмете.

Если вы хотите получить больше доступа к реестру Windows, то вам может пригодиться jRegistryKey API , но это, конечно, будет работать только тогда, когда приложение веб-запуска выполняется на компьютерах с Windows, а не в Linux / Mac / и т. д. java.util.Preferences API более абстрактен в этом.

1 голос
/ 23 апреля 2010

Я могу ошибаться, но пользователи без прав администратора не имеют доступа к периоду HKLM.Чтение или запись.

Если возможно, сохраните настройки в HKCU.Приложение должно содержать настройки по умолчанию, а если значения HKCU не найдены, то значения по умолчанию используются и сохраняются в реестре.Затем пользователь должен иметь возможность изменять эти значения.

...