Доступ к реестру в неадминистраторском режиме

Код Brian, в Ruby:

title.downcase.strip.gsub(/\ /, '-').gsub(/[^\w\-]/, '')

downcase повороты строка к нижнему регистру, strip удаляет ведущий и запаздывающий пробел, первое gsub вызов пробелы globally substitutes с тире, и второе удаляет все, что не является буквой или тире.

5
задан Brian Frost 5 November 2009 в 15:52
поделиться

5 ответов

Вы можете читать из HKLM как пользователь без прав администратора; вы просто не можете писать в него.

Используйте TRegistry.Create (KEY_READ) при его создании и установите RootKey на HKLM.

var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create(KEY_READ)
  try
    Reg.RootKey := HKLM;
    // Read value here
  finally
    Reg.Free;
  end;
end;

Вы также можете использовать TRegistry.OpenKeyReadOnly () при открытии определенного раздела реестра; это также помогает с доступом без прав администратора к разделам реестра.

16
ответ дан 18 December 2019 в 06:03
поделиться

Один из вариантов, который я не одобряю, но упомяну, - это предоставить всем (или определенной группе и т. Д.) Разрешение на доступ к вашему ключу. Есть разные способы сделать это, и в JCL есть код, который это сделает, или вы можете использовать Regedit. Но если вы дадите разрешение (для этой конкретной ветви HKLM), все будет работать так, как вы планировали.

1
ответ дан 18 December 2019 в 06:03
поделиться

Еще одна вещь, о которой здесь никто не упоминает, - это проблема виртуализации реестра в Vista и Win7 (по крайней мере). Возможно, это не проблема в вашем конкретном сценарии, но я подумал, что все равно упомяну об этом, если это актуально.
Даже если у вашего пользователя есть права администратора, если ваше приложение НЕ работает с повышенными привилегиями в Vista / Win7, ваше приложение все равно не сможет писать в «настоящий» ключ HKLM, который, по вашему мнению, таков. Он будет считываться и записываться в виртуализированную копию соответствующего ключа HKLM, которую видит только этот конкретный пользователь.
Под «повышенным» я подразумеваю, что вам будет предложено приглашение UAC в Vista / Win7. Запустите Regedit.exe, например, в Vista / Win7, и вам будет предложено приглашение UAC.
Если вы используете Vista / Win7, возможно, это проблема, которую вы описываете, когда говорите, что невозможно прочитать ключ / значение, записанное в режиме администратора. Если так, то это может быть связано с тем, что ваше приложение на каком-то этапе написало, что теперь является виртуализированным ключом / значением; теперь ваше приложение будет видеть только этот ключ / значение, даже если администратор изменит «реальное» значение.
Как говорили другие, ваше приложение не должно пытаться писать в HKLM. Если вы чувствуете, что нужно писать в HKLM, то в Vista / Win7 ваши варианты (и эти параметры можно настроить для нормальной работы и в XP):

  • Добавьте в свое приложение манифест, требующий повышенных прав администратора в соответствии с этим example .
  • Разделите свою функциональность, требующую доступа HKLM, в отдельную библиотеку COM и создайте ее экземпляр как COM-объект с повышенными правами по мере необходимости. Это более сложный, но разумный способ рефакторинга существующей функциональности.

Вот еще один вопрос SO , который касается некоторых из этих проблем.

2
ответ дан 18 December 2019 в 06:03
поделиться

Ваши варианты включают (а) использование файла конфигурации INI / XML в месте, которое не требует прав администратора для доступа, или (б) изменение безопасности вашего собственного подраздела в HKLM с помощью такой инструмент, как SetACL (общественное достояние).

Проблема с вариантом А заключается в изменении расположения папок между XP и Vista / W7. Я считаю, что Vista ужесточила доступ к CSIDL COMMON APPDATA - стандартные пользователи не имеют доступа к записи, если память не изменяет. Возможно, вам придется хранить их в своей папке и самостоятельно определять права доступа. Раздражает.

Одна интересная проблема с вариантом b заключается в том, что теперь в корпоративных средах используются небольшие служебные инструменты, которые просматривают реестр и «корректируют» права доступа, которые они считают неправильными. Мы еще не сталкивались с проблемами, связанными с их использованием клиентами, но мы знаем, что они существуют.

0
ответ дан 18 December 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: