Код Brian, в Ruby:
title.downcase.strip.gsub(/\ /, '-').gsub(/[^\w\-]/, '')
downcase
повороты строка к нижнему регистру, strip
удаляет ведущий и запаздывающий пробел, первое gsub
вызов пробелы globally substitutes с тире, и второе удаляет все, что не является буквой или тире.
Вы можете читать из 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 () при открытии определенного раздела реестра; это также помогает с доступом без прав администратора к разделам реестра.
См. « Где хранить настройки программы вместо HKEY_LOCAL_MACHINE? »
Ответ , получивший наибольшее количество голосов особенно полезно.
Один из вариантов, который я не одобряю, но упомяну, - это предоставить всем (или определенной группе и т. Д.) Разрешение на доступ к вашему ключу. Есть разные способы сделать это, и в JCL есть код, который это сделает, или вы можете использовать Regedit. Но если вы дадите разрешение (для этой конкретной ветви HKLM), все будет работать так, как вы планировали.
Еще одна вещь, о которой здесь никто не упоминает, - это проблема виртуализации реестра в Vista и Win7 (по крайней мере).
Возможно, это не проблема в вашем конкретном сценарии, но я подумал, что все равно упомяну об этом, если это актуально.
Даже если у вашего пользователя есть права администратора, если ваше приложение НЕ работает с повышенными привилегиями в Vista / Win7, ваше приложение все равно не сможет писать в «настоящий» ключ HKLM, который, по вашему мнению, таков. Он будет считываться и записываться в виртуализированную копию соответствующего ключа HKLM, которую видит только этот конкретный пользователь.
Под «повышенным» я подразумеваю, что вам будет предложено приглашение UAC в Vista / Win7. Запустите Regedit.exe, например, в Vista / Win7, и вам будет предложено приглашение UAC.
Если вы используете Vista / Win7, возможно, это проблема, которую вы описываете, когда говорите, что невозможно прочитать ключ / значение, записанное в режиме администратора. Если так, то это может быть связано с тем, что ваше приложение на каком-то этапе написало, что теперь является виртуализированным ключом / значением; теперь ваше приложение будет видеть только этот ключ / значение, даже если администратор изменит «реальное» значение.
Как говорили другие, ваше приложение не должно пытаться писать в HKLM. Если вы чувствуете, что нужно писать в HKLM, то в Vista / Win7 ваши варианты (и эти параметры можно настроить для нормальной работы и в XP):
Вот еще один вопрос SO , который касается некоторых из этих проблем.
Ваши варианты включают (а) использование файла конфигурации INI / XML в месте, которое не требует прав администратора для доступа, или (б) изменение безопасности вашего собственного подраздела в HKLM с помощью такой инструмент, как SetACL (общественное достояние).
Проблема с вариантом А заключается в изменении расположения папок между XP и Vista / W7. Я считаю, что Vista ужесточила доступ к CSIDL COMMON APPDATA - стандартные пользователи не имеют доступа к записи, если память не изменяет. Возможно, вам придется хранить их в своей папке и самостоятельно определять права доступа. Раздражает.
Одна интересная проблема с вариантом b заключается в том, что теперь в корпоративных средах используются небольшие служебные инструменты, которые просматривают реестр и «корректируют» права доступа, которые они считают неправильными. Мы еще не сталкивались с проблемами, связанными с их использованием клиентами, но мы знаем, что они существуют.