Victor_VG

Tracker Mod | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору 820815 Да, до пользовательской ругани, проходили критику за интерактивные диалоги. Нормальный вариант с простейшим парсером вот: Код: ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "CurrentVersion" StrCpy $1 $0 1 -1 StrCpy $0 $0 1 1 StrCpy $0 $0$1 IntCmpU $0 60 Vista Old +1 IntCmpU $0 61 Win7 Vista WinNew | просто читаем значение номера версии из Реестра, разбираем, переходим. Шесть строк простейшего кода не привязанного к неизвестным макросам как у Вас. В стандартной поставке NSIS 2.46 ANSI такого кода в библиотеках не реализовано, да я согласен, либа типа моей ProcLib это позволит сделать элементарно, но нам стоит задача предельно простым способом проверить номер версии ОС не пользуясь плагинами или любыми средствами отсутствующими в минимальной поставке NSIS (только стандартный инсталлятор с SF.net) и по нему произвести переход на нужную нам ветку алгоритма. Проще прямого чтения Реестра и его разбора ничего нет. Я ждал что Вы уведите этот код после лобовой подсказки, ну да ладно, сам дам, раз уж Вы на этих макросах застряли, и исходники их даже не глянули - а как раз из них видно, что в данном случае это решение не приемлемо. Хотя я и согласен, можно и их использовать, но не в данном случае - мы нарушаем условие постановки задачи вот этим кодом: Код: !macro __WinVer_Call_GetVersionEx STRUCT_SIZE System::Call '*$0(i ${STRUCT_SIZE})' System::Call kernel32::GetVersionEx(ir0)i.r3 !macroend | и этого достаточно. Такое решение мы можем использовать для себя, но не в данном случае. Потому я и сказал про свой парсер. Правда что на него мне потребуется шесть - семь строк я знал заранее, но думал что Вы после такой прямой подсказки посмотрите в Реестр, увидите там это значение, и дальше напишите подобный код, пусть и более длинный, но использующий этот принцип. Ну, каждый думает по своему, хотя лучшее решение для любой задачи - самое простое. И чем оно проще, тем меньше вероятность ошибок и последующих отказов. Наворотить монструозное решение любой дурак сумеет, а вот написать простое, быстрое и эффективное решение - это уже может только настоящий инженер, а не купивший "для престижу" диплом купчик али вчерашний школяр - им сие не по зубам - мозги у них не той системы.
---------- Жив курилка! (Р. Ролан, "Кола Брюньон") Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti |
| Всего записей: 35194 | Зарегистр. 31-07-2002 | Отправлено: 04:40 11-01-2011 | Исправлено: Victor_VG, 05:11 11-01-2011 |
|