|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
Профиль | Отправить PM | Цитировать
Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Пользователь Сообщения: 83
|
Профиль | Отправить PM | Цитировать Заметил такую странность (точнее, заметили пользователи моей программы) - некоторые функции готового инсталлятора не выполняются, если его заархивировать в WinRar и запустить инсталлятор из архива. В частности через код Function .OnInit может не отработать команда ${If} ${FileExists}. На XP у себя такой проблемы не наблюдаю, а вот на более старших системах баг проявляется, но не всегда. Может кто знает из-за чего такое в принципе может происходить.
Почему спрашиваю: через ${If} ${FileExists} у меня встроена проверка оригинальности файлов при запуске инсталлятора. И эта проверка легко обходится простым архивированием инсталлятора. |
Последний раз редактировалось Serg866, 28-07-2018 в 14:35. Отправлено: 14:30, 28-07-2018 | #2211 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 91
|
Профиль | Отправить PM | Цитировать Serg866, вряд ли она может не отработать, скорее отрабатывает она не так, как вы того ожидаете. Нужно больше информации: часть кода, отвечающая за проверку, может даже установщик чтобы посмотреть на поведение вне архива и в архиве.
|
Отправлено: 20:39, 28-07-2018 | #2212 |
Пользователь Сообщения: 83
|
Профиль | Отправить PM | Цитировать Условный код функции
Function .OnInit MessageBox MB_OK|MB_ICONINFORMATION "Здесь предупреждающий текст" IDOK Dialer::GetConnectedState Pop $2 StrCmp $2 "offline" +2 ExecShell "open" "http://forum.oszone.net" sleep 100 ${If} ${FileExists} "$APPDATA\proverka.txt" ${OrIf} ${FileExists} "$EXEDIR\proverka2.txt" ${OrIf} ${FileExists} "$DOCUMENTS\proverka3.txt" Quit ${EndIf} FunctionEnd Замечен баг только на старших системах (Windows 7, 8, 10), но закономерность не обнаружена - на каких-то сборках работает, на каких-то нет. Использую NSIS 3 (Юникод). |
Последний раз редактировалось Serg866, 29-07-2018 в 11:46. Отправлено: 11:38, 29-07-2018 | #2213 |
Пользователь Сообщения: 126
|
Профиль | Отправить PM | Цитировать Привет народ..
Заметил очередную странность в работе программы, суть ее вот в чем:: написал инсталлер с установкой проги на 8 языках в зависимости от выбора чекбоксов.. далее, прикрутил автоопределение языка и в зависимости от языка ОС автоматически проставляется галочка на установку аналогичного языка. При инсталляции все работает вроде исправно, но если запускать деинсталл, то чек бокс проставляется на одну строку в низ, а не туда куда нужно.. Пример кода для инсталла и деинсталла для выбора языка установки в чек-боксах:: Function .onInit Push $R0 SetCurInstType 0 !insertmacro MUI_LANGDLL_DISPLAY !insertmacro MUI_INSTALLOPTIONS_EXTRACT "setup.ini" StrCpy $1 ${SecMod} SetSilent normal ;-------------------------------- # При запуске инсталлятора назначаем секции статус "Отмечена" ${If} $LANGUAGE == ${LANG_ENGLISH} ;IntOp $0 ${SF_SELECTED} // $0 SectionSetFlags ${SecModFiles1} 1 ${ElseIf} $LANGUAGE == ${LANG_ROMANIAN} SectionSetFlags ${SecModFiles2} 1 ${ElseIf} $LANGUAGE == ${LANG_GERMAN} SectionSetFlags ${SecModFiles3} 1 ${ElseIf} $LANGUAGE == ${LANG_RUSSIAN} SectionSetFlags ${SecModFiles4} 1 ${ElseIf} $LANGUAGE == ${LANG_ITALIAN} SectionSetFlags ${SecModFiles5} 1 ${ElseIf} $LANGUAGE == ${LANG_CZECH} SectionSetFlags ${SecModFiles6} 1 ${ElseIf} $LANGUAGE == ${LANG_POLISH} SectionSetFlags ${SecModFiles7} 1 ${ElseIf} $LANGUAGE == ${LANG_SPANISH} SectionSetFlags ${SecModFiles8} 1 ${EndIf} .... Function un.onInit !insertmacro MUI_UNGETLANGUAGE Push $R0 StrCpy $1 ${unSecMod} ;-------------------------------- ${If} $LANGUAGE == ${LANG_ENGLISH} ;IntOp $0 ${SF_SELECTED} // $0 SectionSetFlags ${SecModFiles1} 1 ${ElseIf} $LANGUAGE == ${LANG_ROMANIAN} SectionSetFlags ${SecModFiles2} 1 ${ElseIf} $LANGUAGE == ${LANG_GERMAN} SectionSetFlags ${SecModFiles3} 1 ${ElseIf} $LANGUAGE == ${LANG_RUSSIAN} SectionSetFlags ${SecModFiles4} 1 ${ElseIf} $LANGUAGE == ${LANG_ITALIAN} SectionSetFlags ${SecModFiles5} 1 ${ElseIf} $LANGUAGE == ${LANG_CZECH} SectionSetFlags ${SecModFiles6} 1 ${ElseIf} $LANGUAGE == ${LANG_POLISH} SectionSetFlags ${SecModFiles7} 1 ${ElseIf} $LANGUAGE == ${LANG_SPANISH} SectionSetFlags ${SecModFiles8} 1 ${EndIf} Использую нсис-юникод 2.46.5 |
Отправлено: 12:50, 29-07-2018 | #2214 |
Пользователь Сообщения: 83
|
Профиль | Отправить PM | Цитировать Задумал проверять разрешение экрана пользователя.
Пример из справки "Определяем и меняем разрешение экрана" не заработал на NSIS3 (Unicode). Компилируется без ошибок, но при запуске ничего не происходит. Используется какой-то древний плагин ChangeRes 2003 года. Есть ли рабочие примеры проверки разрешения дисплея для NSIS 3 под юникод? |
Отправлено: 17:55, 04-08-2018 | #2215 |
Пользователь Сообщения: 94
|
Профиль | Отправить PM | Цитировать Цитата Serg866:
Цитата:
Пример
Unicode true Name "Get User Screen Resolution" Caption "Get User Screen Resolution" XPStyle "on" Function .onInit ; Выполняем инициализацию папки для распаковки плагинов InitPluginsDir ; Устанавливаем каталог распаковки файлов SetOutPath $PLUGINSDIR ; Записываем файлы плагинов File "${NSISDIR}\Plugins\x86-unicode\CallAnsiPlugin.dll" File "${NSISDIR}\Plugins\x86-ansi\ChangeRes.dll" ; Получаем текущие размеры экрана System::Call 'user32::GetSystemMetrics(i 0) i .r0' ; Ширина в пикселях System::Call 'user32::GetSystemMetrics(i 1) i .r1' ; Высота в пикселях ; Выводим сообщение с текущим разрешением экрана MessageBox MB_OK|MB_ICONINFORMATION "Screen Resolution: $\r$\n$0 X $1" ; Изменяем разрешение экрана на 1024х768 пикселей, глубиной цвета 32-бит и частотой обновления 60 Гц CallAnsiPlugin::Call "$PLUGINSDIR\ChangeRes.dll" ChangeResolution 4 1024 768 32 60 ; Получаем новые размеры экрана System::Call 'user32::GetSystemMetrics(i 0) i .r2' ; Ширина в пикселях System::Call 'user32::GetSystemMetrics(i 1) i .r3' ; Высота в пикселях ; Выводим сообщение с новым разрешением экрана MessageBox MB_OK|MB_ICONINFORMATION "New Screen Resolution: $\r$\n$2 X $3" ; Восстанавливаем передыдущее разрешение экрана (условно считаем, что у ; пользователя были установлены глубина цвета 32-бит и частота 60 Гц) CallAnsiPlugin::Call "$PLUGINSDIR\ChangeRes.dll" ChangeResolution 4 $0 $1 32 60 ; Выход Quit FunctionEnd Section "-null" SectionEnd Если функционал вашей программы установки активно использует регистры общего назначения, то для хранения исходных значений с размерами экрана лучше задействовать собственные переменные. |
||
Отправлено: 02:50, 05-08-2018 | #2216 |
Пользователь Сообщения: 83
|
Профиль | Отправить PM | Цитировать Flix, спасибо за подробный разбор!
Я не планировал смену разрешения у пользователей. Нужно только определять текущее разрешение экрана с целью узнать поддерживает ли монитор Full HD. Таким образом, если разрешение равно 1920х1080, то один код в инсталляторе. Если нет, то код другой. Понимаю теперь, что это делается без сторонних плагинов. Основываясь на Справочнике и Вашем примере, получился такой код функции. Будет ли сиё работать со всеми Windows от XP до 10? Или что-то нужно добавить? Function .onInit ; Получаем текущие размеры экрана System::Call 'user32::GetSystemMetrics(i 0) i .r0' ; Ширина в пикселях System::Call 'user32::GetSystemMetrics(i 1) i .r1' ; Высота в пикселях ${If} $0 == 1920 ${AndIf} $1 == 1080 MessageBox MB_OK "Установлено разрешение 1920x1080" ${Else} MessageBox MB_OK "Установлено любое другое разрешение" ${EndIf} FunctionEnd Цитата Flix:
|
|
Последний раз редактировалось Serg866, 05-08-2018 в 15:56. Отправлено: 15:45, 05-08-2018 | #2217 |
Пользователь Сообщения: 94
|
Профиль | Отправить PM | Цитировать Цитата Serg866:
Цитата Serg866:
|
||
Отправлено: 15:26, 07-08-2018 | #2218 |
Новый участник Сообщения: 43
|
Профиль | Отправить PM | Цитировать подскажите , и по возможности кто знает подправьте пожалуйста ,почему скрипт не компилируется? )
|
------- Отправлено: 20:16, 16-08-2018 | #2219 |
Пользователь Сообщения: 91
|
Профиль | Отправить PM | Цитировать Цитата agrei678:
|
|
Отправлено: 20:28, 16-08-2018 | #2220 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 | dimadr | Наборы обновлений для Windows XP/2003/Windows 7 | 267 | 14-02-2020 08:25 | |
[архив].: NSIS - все вопросы :. | kotkovets | Автоматическая установка приложений | 3387 | 09-12-2012 11:56 | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 1491 | 22-07-2011 22:42 | |
Выбор|модернизация процессора .:[все вопросы]:. Часть I | Myxa | Выбор отдельных компонентов компьютера и конфигурации в целом | 1845 | 01-01-2011 19:18 | |
Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 |
|