Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2.

Ответить
Настройки темы
.: NSIS - все вопросы :. часть 2.

Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: kotkovets
Дата: 07-06-2020
Описание: NSIS 3.05


Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения.


Описание:
читать дальше »
NSIS (Nullsoft Scriptable Install System) - профессиональная система для создания инсталляторов в среде Windows с октрытым исходным кодом. При своем малом размере система очень гибкая, и при с широкими возможностями. Генерируемый ею инсталлятор также имеет очень маленький размер и идеально подходит для распространения продукта через Интернет.


Текущая версия: NSIS 3.05 от 15 декабря 2019 года
Скачать | Архив сборок версии

Первая часть этой темы
Скачать первую часть этой темы одним архивом

ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов:
Справочник по NSIS - создан силами нашего сообщества.
Руководство пользователя. Перевод – Поляков А.В, зеркало

Документация

Утилиты разработчика
Расширение функциональности

Примеры скриптов на нашем форуме
Скрипт NSIS для перепаковки AIMP2+Сборки
Тема для Notepad++(пример парсинга XML)

Достоинства
читать дальше »


◦ Очень маленький размер установочного блока (около 34 Кбайт)
◦ zlib, bzip2 и LZMA-сжатие
◦ Гибкая система скриптов (спецально разработанная для инсталляторов)
◦ Поддержка многоязычности, точнее 53 языка, есть возможность ввода нового языка
◦ Поддержка плагинов
◦ Скрипт Препроцессор
◦ Создание Web-инсталляторов


Ещё немного полезной информации:
читать дальше »

▫ История создания установщика

NSIS создан как альтернатива InstallShield, предназначенного для коммерческих продуктов.

NSIS был создан для распространения Winamp. Он базируется на предыдущем продукте Nullsoft — PiMP (plugin Mini Packager), иначе известным как SuperPiMP. После версии 2.0a0, проект был перемещён на SourceForge.net, где к работе над ним присоединились и сторонние разработчики. NSIS 2.0 был выпущен в свет 2 года спустя.

NSIS версии 1 был очень похож на классический Windows Installer, но он был более управлемым с помощью скриптов и поддерживал другие форматы сжатия. NSIS версии 2 поддерживает новый графический интерфейс пользователя, LZMA-сжатие, многоязычность и имеет хорошую систему плагинов.

Версия 2.01 была первой версией, поддерживающей компиляцию на любой из POSIX-платформ. Это позволило создавать Windows-инсталляторы на GNU/Linux и FreeBSD без использования эмулятора Wine. На данный момент поддерживается компиляция только для Windows.

▫ Описание

Компилятор NSIS — программа makensis — компилирует скрипты в исполняемый код. Каждая строчка скрипта содержит одну команду. Пример:
Код: Выделить весь код
 # Пример скрипта
 Name "Example1"
 OutFile "example1.exe"
 InstallDir "$PROGRAMFILES\Example1"
 Page Directory
 Page InstFiles
 Section
   SetOutPath $INSTDIR
   File ..\makensis.exe
 SectionEnd

Modern User Interface

В версии 2.0 был введён новый графический интерфейс пользователя, названный Modern UI (MUI). MUI очень похож на интерфейс мастеров, он поддерживает splash screen, выбора языка, выбор компонентов для установки и более широкие возможности настройки по сравнению со своим предшественником. Пример:
Код: Выделить весь код
 # Пример скрипта с Modern UI
 !include MUI.nsh
 Name "Example 2"
 OutFile Example2.exe
 !insertmacro MUI_PAGE_WELCOME
 !insertmacro MUI_PAGE_LICENSE "license.rtf"
 !insertmacro MUI_PAGE_DIRECTORY
 !insertmacro MUI_PAGE_COMPONENTS
 !insertmacro MUI_PAGE_INSTFILES
 !insertmacro MUI_PAGE_FINISH
 !insertmacro MUI_LANGUAGE "English"
 !insertmacro MUI_LANGUAGE "German"
 !insertmacro MUI_LANGUAGE "French"
 Section "Extract makensis"
  SetOutPath $INSTDIR
  File ..\makensis.exe
 SectionEnd
NSIS может быть расширен при помощи плагинов, которые могут быть написаны на C++, Си, и Delphi. Плагины могут быть использованы для улучшения функциональности и интерфейса инсталлятора. Плагины могут быть вызваны в любой части кода NSIS скрипта.

С пакетом NSIS поставляются несколько плагинов, позволяющих добавлять новые страницы, заменять фоновые изображения, скачивать файлы из Интернета, выполнять математические вычисления, обновлять файлы и многое другое.

▫ Программы, использующие NSIS


◦ Антивирус Касперского
◦ Qip
◦ 3DNA Desktop
◦ 7-Zip
◦ ATI Display Driver
◦ CDex
◦ Dev-C++
◦ DivX
◦ eMule FileZilla
◦ Google Picasa
◦ Google Talk
◦ Intel C (компилятор)
◦ IrfanView
◦ LightAllow
◦ LyX
◦ Miranda IM Mozilla Firefox 2.0
◦ NASA World Wind
◦ Notepad++
◦ OpenOffice.org для Windows
◦ Pidgin
◦ VLC Player
◦ Winamp

▫ Чем я могу распаковать инсталлятор, созданный в NSIS?

В настоящее время инсталляторы NSIS не могут быть полностью декомпилированы. Сам инсталлятор не содержит в себе никаких функций для того, чтобы извлечь сценарий и/или файлы без инсталляции. Это - выбор разработчика, доступны ли исходный текст и/или файлы для инсталлятора для публики или нет. Есть, однако, внешние инструментальные средства, которые позволяют это сделать. 7-zip поддерживает частичную распаковку NSIS инсталляторов с алгоритмом сжатия lzma или bzip. Так же существует мульти-архивный плагин для TotalCommander.
Небольшая заметка для разработчиков: используйте DCryptDll, если хотите скрыть некоторые файлы в вашей инсталляции.


-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:02, 09-12-2012

 

Пользователь


Сообщения: 108
Благодарности: 5

Профиль | Сайт | Отправить PM | Цитировать


И снова о "занятых" DLL...
Читать дальше...

В составе программы FolderSizes (foldersizes.com) есть файл FSShellExt.dll, с помощью которого в контекстное меню папок добавляются собственные команды программы.



Мне нужно пропатчить эту dll-ку или, в крайнем случае, заменить своей и, конечно же, без перезагрузки. Проблема в том, что dll-ка "занята" и не поддается изменению/удалению. Скопировать её можно.

Не очень понимая, что получаю, заметил такую закономерность.

Пока контекстное меню папки (любой) не вызывалось, файл остается "свободным", хоть до выключения компьютера.



Как только контекстное меню вызвано, файл "захватывает" Explorer.exe.



Просто так его уже не удалить.



Но файл FSShellExt.dll можно ЗАМЕНИТЬ вручную (из учетки администратора, Win 8.1), например, его же копией. Проводник сопротивляется, но все же дает выполнить эту операцию.



О чудо! Файл теперь можно патчить, удалять, перемещать, переименовывать и т.д. И опять же, до вызова контекстного меню папки.

Так как бы узнать, какая команда была выполнена, что Проводник разблокировал файл и можно ли это как-то использовать в сценарии NSIS? Насколько я понимаю, регистрация FSShellExt.dll не отменяется и сохраняется даже после его удаления. Контекстное меню начинает работать сразу же после копирования файла FSShellExt.dll на то же место (в папку программы) и вызова контекстного меню папки.

Предыдущие сообщения читал. Может появилось какое-то "бесперезагрузочное" решение.

Отправлено: 20:12, 27-11-2014 | #1381



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Цитата Kopejkin:
Может появилось какое-то "бесперезагрузочное" решение. »
Дык разве предыдущее обсуждение - не решение ? Находим с помощью LockedList, что "заняло" DLL, закрываем найденное и работаем спокойно с DLL без перезагрузки.

Отправлено: 10:09, 28-11-2014 | #1382


Пользователь


Сообщения: 108
Благодарности: 5

Профиль | Сайт | Отправить PM | Цитировать


Цитата MKN:
Находим с помощью LockedList... »
Наверное, я что-то не так делаю.
Подставляю имя dll-ки в пример LockedListShell32.nsi для проверки.
Читать дальше

Код: Выделить весь код
Name `LockedList Test`
OutFile LockedListTest.exe
RequestExecutionLevel user

!include MUI2.nsh
!include x64.nsh

!insertmacro MUI_PAGE_WELCOME
Page Custom LockedListShow
!insertmacro MUI_PAGE_FINISH

!insertmacro MUI_LANGUAGE English

Function LockedListShow
  !insertmacro MUI_HEADER_TEXT `LockedList Test` `Using AddModule and shell32.dll`
  ${If} ${RunningX64}
    File /oname=$PLUGINSDIR\LockedList64.dll `${NSISDIR}\Plugins\x86-ansi\LockedList64.dll`
  ${EndIf}
  LockedList::AddModule \FSShellExt.dll
  ;LockedList::AddModule "C:\Program Files\Key Metric Software\FolderSizes 7\FSShellExt.dll"
  LockedList::Dialog
  Pop $R0
FunctionEnd

Section
SectionEnd
В итоге нечего закрывать.

Отправлено: 21:56, 28-11-2014 | #1383

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Цитата Kopejkin:
Наверное, я что-то не так делаю. »
всё так.
Цитата:
LockedList::AddModule "$PROGRAMFILES\Key Metric Software\FolderSizes 7\FSShellExt.dll"
LockedList::Dialog
Действительно, есть такой странный момент "не определения" для explorer_a. ( и это касается аналогичных библиотек не только для FolderSizes )
Если работать с TotalCommander_ом, то LockedList всё прекрасно отображает... Я с explorer_ом никогда не работаю, потому и не заметил... В чём дело, пока не известно... Надо бы задать этот вопрос автору плагина.
Если хочешь, попробуй спросить на http://forums.winamp.com/showthread.php?t=274168&page=8 Ты ведь английским хорошо владеешь ?
( Как вариант, можно попробовать предыдущие версии плагина, вдруг автор именно в этой последней версии чего то забыл... Так иногда бывает... )

ps С другой стороны - ведь прекрасно известно, что именно explorer.exe занимает FSShellExt.dll. Ну так и гаси его перед манипуляциями с DLL. Лучше с сообщением-предупреждением.

ps2 Потому и хотелось бы автономного кода NSIS, для этих целей (определение конкретных процессов, использующих конкретную указанную DLL (OCX или EXE ), с последующим закрытием этого(этих) процесса(ов) .
Может kotkovets поможет (хорошо бы добавить такую возможность в его замечательный ProcessFunс.nsh ) ? Вячеслав, помоги пожалуйста решить эту задачу.

Последний раз редактировалось MKN, 29-11-2014 в 10:25.


Отправлено: 09:58, 29-11-2014 | #1384


Пользователь


Сообщения: 108
Благодарности: 5

Профиль | Сайт | Отправить PM | Цитировать


Цитата MKN:
Ну так и гаси его.. »
Я пробовал пример из Справочника. Но на Win 8.1 он работает как-то странно. А может это винда странно работает после отработки скрипта. Смысл примера - убить explorer и сразу же его запустить. Проводник действительно работает, его операции можно выполнять, dll-ку можно изменять, НО..."теряется" Рабочий стол, и восстановить его отображение можно только перезагрузкой. У меня, по крайней мере, так. После применение Unlocker винду тоже немного колбасит, но не так критично - на секунду пропадает Рабочий стол и снова появляется. То есть не очень красиво.

Отправлено: 10:44, 29-11-2014 | #1385

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Цитата Kopejkin:
Смысл примера - убить explorer и сразу же его запустить. »
Попробуй командно :
Цитата:
Taskkill /f /im explorer.exe
start explorer.exe
или плагин http://nsis.sourceforge.net/NsRestartExplorer_plug-in - работает оч быстро на XP, на Win8 - тормоз
У меня рестарт проводника в W8x32 происходит нормально - на секнду исчезают значки раб стола и затем восстанавливаются. Может как то и можно принудительно "заморозить" на время рестарта это не красивое исчезновение - не знаю...

Последний раз редактировалось MKN, 29-11-2014 в 12:14.


Отправлено: 11:37, 29-11-2014 | #1386


Пользователь


Сообщения: 108
Благодарности: 5

Профиль | Сайт | Отправить PM | Цитировать


Цитата MKN:
...в W8x32 происходит нормально »
У меня Windows 8.1x64.
Командно работает точно также. Оказывается explorer.exe убивается и запускается - его видно в диспетчере задач - но какой-то недоделанный. Чтобы стал виден Рабочий стол, Проводник нужно запустить из Диспетчера как новую задачу.
В общем, не знаю, как правильно пояснить.
Может маленькое видео поможет.

Последний раз редактировалось Kopejkin, 30-11-2014 в 00:14.


Отправлено: 20:45, 29-11-2014 | #1387


Пользователь


Сообщения: 96
Благодарности: 1

Профиль | Отправить PM | Цитировать


Здравствуйте господа форумчане. Спустя много времени я решил вернутся к своему старому проекту, а посему нужна ваша помощь. Как из окошка исполняемой консольной программы передать все что там выводится в функцию nsis? Логирование в реальном времени. Это нужно прежде всего, чтобы "поймать" нужное сообщение, и послать окошку нажатие enter как только оно(нужное сообщение) появится, ну и чтобы посылать весь лог в detailed окно nsis. Вы скажете "а почему бы тебе не использовать execdos plug-in для этих целей?" С ним- не получается почему-то.Использую execcmd.

Отправлено: 23:27, 30-11-2014 | #1388


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нашел решение своей проблемы с плагинами. По умолчанию при вызове ф-ции из плагина dll-ка перед выполнением загружается в память, а после выполнения выгружается из памяти. И так каждый раз при вызове любой ф-ции dll. Поэтому данные в памяти не сохраняются между вызовами dll. Чтобы dll каждый раз не выгружалась, следовало использовать "/NOUNLOAD" или "SetPluginsUnload". Однако с версии 2.42 эти "штуки" считаются устаревшими и не рекомендуются для использования. Вот здесь в последнем сообщении есть пример на Delphi, как создать dll, которая сохраняет память между вызовами ее ф-ций.

Последний раз редактировалось Sann-X!, 01-12-2014 в 09:15.


Отправлено: 09:02, 01-12-2014 | #1389


Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Цитата Vincent7:
Вы скажете "а почему бы тебе не использовать execdos plug-in для этих целей?" С ним- не получается почему-то »
Потому что вы, видимо, опять сами ничего не пробовали, если взять документацию к плагину и посмотреть примеры скриптов в архиве с плагином - почему-то получается, по-крайней мере у меня с этим плагином получилось всё сразу.

Цитата Vincent7:
Использую execcmd. »
У ExecCmd нет такой возможности, как
Цитата Vincent7:
из окошка исполняемой консольной программы передать все что там выводится в функцию nsis? Логирование в реальном времени »
а у ExecDos есть, для этого нужно использовать ключ /TOFUNC

Интересно, он прочитает документацию к плагину и посмотрит примеры, или как год назад начнёт насиловать мозг глупыми вопросами?

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]


Отправлено: 17:59, 01-12-2014 | #1390



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 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




 
Переход