Не следует путать белое с пушистым:Ну если по большому счету, то функция (getenv) в AutoLisp появилась в том незапамятном году, когда никто о том, что когда-нибудь появится Windows и в нем будет понятие реестра даже и предполагать не мог. Зато AutoCAD работал под Unix, в котором принята регистрозависимость. И хранилась эта информация в файле настроек, а не в реестре.
Кроме того, в подобных ситуациях независимость от регистра достаточно удобнаС этим я могу согласится. Точнее могу согласится с желательностью единообразия. Т.е. если имя переменной окружения регистронезивисимое, то и имя ключа в реестре должно быть регистронезависимым.
зависимость от регистра может вызвать определённые затруднения в использовании таких переменных рядовыми пользователями AutoCAD (обратите внимание).А зачем рядовым пользователям AutoCAD использовать "такие" переменные?
Короче говоря так исторически сложилось.Ясно. Хотя с тех пор, как AutoCAD перешёл на Windows прошло много лет и внести соответствующие изменения (убрать зависимость от регистра) можно было бы уже давно, ибо не под Unix пишут...
А зачем рядовым пользователям AutoCAD использовать "такие" переменные?Юзер может и не использовать сам по себе - использовать могут всякие программки, загружаемые им в AutoCAD. В readme.txt программок автор может указать имена переменных, влияющих на поведение программки, но при этом ошибиться с регистром. Этот факт вскроется при просмотре ветки реестра с помощью regedit.exe.
P.S.: Что касается этой статьи, то в ней есть на мой взгляд неосвещенный вопрос - в ряде случаев информация берется из ключа реестра HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:YYY\FixedProfile\GeneralЕсть такое дело... Возможно Алексей, сказав "А", скажет и "Б" на тему обозначенной вами ветки реестра... :) В частности в ветке FixedProfile будет создана произвольная пользовательская переменная "Самая Крутая Переменная", о которой я писал выше. Насколько я понимаю, в обозначенной ветке хранится общая для всех профилей AutoCAD информация.
В readme.txt программок автор может указать имена переменных, влияющих на поведение программки, но при этом ошибиться с регистром.Мне кажется, что этот вопрос можно решить трояко:
1) Сообщить об этом автору, если (getenv "имя переменной") возвратит nilЭто не всегда удобно (по времени, необходимом на такого рода переписку) или не всегда возможно (нет обратной связи).
Мне кажется, что этот вопрос можно решить двояко:Это у вас дома может быть масса таких программ, прошу не путать с рабочей обстановкой... В нормальной компании юзер не имеет админских прав, необходимых для установки софта. Кроме того, много ли вам таких пользователей известно, которые умеют пользоваться командой reg и знают, какой именно параметр ей нужно указать? Вопрос риторический...
2) Кроме regedit.exe есть еще масса программ, позволяющих посмотреть реестр (или хотя-бы получить текстовый файл со списком ключей/переменных). Например:
3) Обратится к сисадминам, чтобы они помогли проверить имя/значение переменной в реестре.По такому вопросу сисадмин с вероятностью 99,9% пошлёт юзера гулять лесом, поскольку искомая запись находится в юзерской ветке реестра, а войдя под админской записью админ в HKCU получит др. ветку (свою, а не юзера). Ковыряться в ветке в USERS в поисках нужной записи админу будет лень\некогда. У нас именно так и происходит (полагаю, что не только у нас). И вообще, если бы не было зависимости от регистра, данной проблемы вообще не возникало бы (приехали туда, откуда отправлялись)...
Регистровая зависимость имени параметра в реестре, противоречащая самому API операционной системыПричем здесь API операционной системы? Функция (getenv) в действительности в ряде случаев использует API для работы с реестром в Windows. Ну и что?
Input environment variable name to get, which is case sensitive in all environments (Visual LISP, ObjectARX, and VB/ActiveX)
Причем здесь API операционной системы?При том, что используя этот API я получаю нужный раздел или параметр вне зависимости от регистра символов, которыми набрано искомое имя.
Кстати это документированное поведение функцииИ что? Задокументированный баг. На это я вам процитирую Джона Роббинса:
Баг - это всё что угодно, что заставляет пользователя страдать:В данном случае, зависимость от регистра может временами "заставить пользователя страдать" ибо появляются "неудовлетворённые ожидания".
- аварии и зависания
- низкая производительность и масштабируемость
- неверные результаты
- нарушение безопасности
- противоречивые пользовательские интерфейсы
- неудовлетворённые ожидания
По такому вопросу сисадмин с вероятностью 99,9% пошлёт юзера гулять лесом, поскольку искомая запись находится в юзерской ветке реестра, а войдя под админской записью админ в HKCU получит др. ветку (свою, а не юзера). Ковыряться в ветке в USERS в поисках нужной записи админу будет лень\некогда.Это говорит лишь о том, что организация труда у вас неправильная. Сисадмины должны помогать, а не препятствовать проектировщикам, ибо именно проектировщики приносят в организацию деньги. А дойную корову нужно любить и уважать.