|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
|
.: NSIS - все вопросы :. часть 2.
|
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором 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 |
|
Пользователь Сообщения: 98
|
Профиль | Отправить 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 |
|
Пользователь Сообщения: 98
|
Профиль | Отправить 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 | |
|