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

Компьютерный форум 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

 

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


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

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


K.A.V., директория создаётся, но значок стандартный

Цитата:
CreateDirectory "$STARTMENU\Документы"
FileOpen $0 "$STARTMENU\Документы\Desktop.ini" w
FileWrite $0 "[.ShellClassInfo]$\r$\n"
FileWrite $0 "IconFile=%SystemRoot%\system32\shell32.dll$\r$\n"
FileWrite $0 "IconIndex=126$\r$\n"
FileClose $0
WriteINIStr "$STARTMENU\Документы\Desktop.ini" ".ShellClassInfo" "IconFile" "%SystemRoot%\system32\shell32.dll"
WriteINIStr "$STARTMENU\Документы\Desktop.ini" ".ShellClassInfo" "IconIndex" "126"
SetFileAttributes "$STARTMENU\Документы\Desktop.ini" HIDDEN|SYSTEM
не пойму где ошибка?

Отправлено: 15:11, 01-12-2013 | #811



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

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

MKN MKN вне форума

Ветеран


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

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


Возможно ли c помощью NSIS, организовать замену в файле, одних байт на другие ? ( Т.е. - заменить в файле по такому то адресу, имеющееся значение - на другое)
Если нет, то вопрос не совсем в тему - есть ли для этого, какой то утиль командной строки ?

Отправлено: 16:01, 01-12-2013 | #812


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

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


Contributor


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

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


Цитата vosya:
не пойму где ошибка? »
В вашей невнимательности

Цитата K.A.V.:
1. Директории обязательно нужно назначить аттрибут Системный »
Добавить:
Код: Выделить весь код
SetFileAttributes "$STARTMENU\Документы" SYSTEM
И зачем вам это??
Код: Выделить весь код
FileOpen $0 "$STARTMENU\Документы\Desktop.ini" w
 FileWrite $0 "[.ShellClassInfo]$\r$\n"
 FileWrite $0 "IconFile=%SystemRoot%\system32\shell32.dll$\r$\n"
 FileWrite $0 "IconIndex=126$\r$\n"
 FileClose $0
Вы же прописали ниже
Код: Выделить весь код
WriteINIStr "$STARTMENU\Документы\Desktop.ini" ".ShellClassInfo" "IconFile" "%SystemRoot%\system32\shell32.dll"
WriteINIStr "$STARTMENU\Документы\Desktop.ini" ".ShellClassInfo" "IconIndex" "126"
Читайте тоже справку, и главное тесты, очень много тестов


---
Цитата MKN:
Возможно ли c помощью NSIS, организовать замену в файле, одних байт на другие ? ( Т.е. - заменить в файле по такому то адресу, имеющееся значение - на другое)
Если нет, то вопрос не совсем в тему - есть ли для этого, какой то утиль командной строки ? »
Насчет этого ничего не знаю, таким вопросом не задавался, твоя надежда на kotkovets

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

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

Отправлено: 16:06, 01-12-2013 | #813

MKN MKN вне форума

Ветеран


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

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


Цитата K.A.V.:
таким вопросом не задавался, твоя надежда на kotkovets »
А вопрос то интересный... К примеру, можно простой заменой одного на другое, в ярлыке установить свойство - "запускать от имени администратора". Сейчас для этого предлагается или громоздский код, или плагин. А был бы способ байтозамены, может было бы проще...

Отправлено: 16:21, 01-12-2013 | #814


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


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

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


Уважаемый K.A.V, не получается у меня..
Код: Выделить весь код
System::Call 'kernel32::GetStdHandle(i -11)i.r0'
System::Call 'kernel32::AllocConsole(i -1)'
FileWrite $0 "TEST"
этот код создает второе окно а в мое не записывает

Отправлено: 17:05, 01-12-2013 | #815


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

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


Contributor


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

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


Цитата MKN:
К примеру, можно простой заменой одного на другое, в ярлыке установить свойство - "запускать от имени администратора" »
Я в такие тонкости не вникал и не знаю о таких возможностях, мне NSIS нужен только для написания SFX Creator'а, я на NSIS ни одного инсталляционного пакета не собрал , не считая все те тесты, которые были сделаны мной в момент изучения возможностей NSIS

Команы FileReadByte и FileWriteByte не то в оригинальной справке к NSIS? Я просто инглиша не знаю, а гугл не особо помогает в техническом переводе правильно понять смысл...
Я, честно сказать, вообще не в теме, т.к. такими вопросами не занимался...HEX, байты и т.д. мне не интересны
не то?, там наш коллега amel27 советует DD


---
Цитата Vincent7:
этот код создает второе окно а в мое не записывает
И не должен...Какой смысл вам давать готовые коды, если вы всё равно не желаете понимать ни смысла функций ни то, что и как писать? Зачем тогда вы пришли программировать без желания обучаться и узнавать что-то новое?
Если вам банально лень - то мне тоже лень сидеть и писать для вас готовые коды, в которых вы даже не желаете разбираться, ctrl+c => ctrl+v всем нравится
Чтобы вам писать в уже существующий процесс, вам нужно вызывать дополнительно AttachConsole и посылать этой функции PID процесса

Это последний готовый код для вас от меня, до тех пор, пока у вас не появится желание самому что-то делать, разбираться и пока не научитесь не писать всё подряд в свой код
читать дальше »

Код: Выделить весь код
Caption "PressKey.exe"                        
OutFile "PressKey.exe" 


Function .onInit
FindWindow $0 "ConsoleWindowClass" "Администратор: $SYSDIR\cmd.exe"
 ; Ищем консольное окно, в котороее будем отправлять информацию

 IsWindow $0 +2 0
; Если окно найдено - продолжаем, если нет - сообщение с ошибкой и закрытие приложения
MessageBox MB_OK|MB_ICONSTOP "Окно не найдено" idok exit

System::Call 'user32::GetWindowThreadProcessId(ir0, *l.r0)'
; По найденному handle окна определяем PID процесса, к которому принадлежит окно

System::Call 'kernel32::AttachConsole(ir0)i.r0' 
; В команду AttachConsole послыаем PID процесса, чтобы писать именно в нашу командную строку

System::Call 'kernel32::GetStdHandle(i -11)i.r0' 
; Получаем дескриптор ввода данных консоли

FileWrite $0 "TEST started...hide window after 3 seconds"
 FileWrite $0 "$\n$\n$\n$\n================= Hello, Vincent7 !!! ================="
 FileWrite $0 "$\n$\n================= Hello, Vincent7 !!! ================="
 FileWrite $0 "$\n$\n================= Hello, Vincent7 !!! ================="
 FileWrite $0 "$\n$\n================= Hello, Vincent7 !!! ================="
; Записываем информацию в консоль

MessageBox MB_OK|MB_ICONINFORMATION "Готово"
exit:
quit
FunctionEnd


я лучше пойду покушаю бетку SFX Creator'а своего писать

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


Отправлено: 19:32, 01-12-2013 | #816


Аватара для kotkovets

Ветеран


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

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


Цитата MKN:
Возможно ли c помощью NSIS, организовать замену в файле, одних байт на другие ? »
возвможно.. через FileWriteByte - тока нихера работать не будет..из за смещений адресов путем замены
нужно пересчитывать различные адреса, суммы, хэши - отсюда громоздкий километровый код
и это только в теории, а на практике - врядли..
--
Vincent7, хорош флудить здесь - код работает..

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


Отправлено: 21:15, 01-12-2013 | #817


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


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

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


Код: Выделить весь код
section "f"
ExecDos::exec /NOUNLOAD /ASYNC /DETAILED '"$SYSDIR\cmd.exe" /c $EXEDIR\sisInstall.exe extractAll I:\sku.sis D:\h'
FindWindow $1 "$SYSDIR\cmd.exe"
IsWindow $1 +2 0
MessageBox MB_OK|MB_ICONSTOP "not found" idok
System::Call 'user32::GetWindowThreadProcessId(ir0, *l.r0)'
System::Call 'kernel32::AttachConsole(ir0)i.r0'
System::Call 'kernel32::GetStdHandle(i -11)i.r0'
FileWrite $1 "TEST"
sectionend
'not found'. не находит...

Отправлено: 21:51, 01-12-2013 | #818


Аватара для kotkovets

Ветеран


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

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


Vincent7, а с чего работать будет, с какого перепуга?
ExecDos отработает и усё - нет никакого окна после плага, видимого и невидимого
нужно, запускать не в режиме ожидания выполнения процесса..
Код: Выделить весь код
Section
   Exec 'cmd.exe /c "путь к файлу exe"'
   sleep 500 ;пауза, чтобы окно "споймать"
   FindWindow $0 "ConsoleWindowClass" "$SYSDIR\cmd.exe"
   IsWindow $0 0 exit
   System::Call 'user32::GetWindowThreadProcessId(ir0, *l.r0)'
   System::Call 'kernel32::AttachConsole(ir0)i.r0'
   System::Call 'kernel32::GetStdHandle(i -11)i.r0'
   FileWrite $0 "TEST"
   exit:
SectionEnd
---
Вообще для чего это нужно, озвучьте?

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


Последний раз редактировалось kotkovets, 01-12-2013 в 22:32.


Отправлено: 22:18, 01-12-2013 | #819


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

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


Contributor


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

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


Цитата kotkovets:
Вообще для чего это нужно, озвучьте? »
Думаю, не стоит спрашивать, ибо тут сразу было видно - человек ни в какую не хочет разбираться в этом всём, человек не понимает для чего и что он пишет, взять хотябы:

Цитата Vincent7:
FindWindow $1 "$SYSDIR\cmd.exe" »
Он упёрто отказывается читать в файле справки, в котором ясно написано - второй параметр в команде FindWindow - это класс окна, а он там указывает имя окна

Цитата Vincent7:
System::Call 'user32::GetWindowThreadProcessId(ir0, *l.r0)'
System::Call 'kernel32::AttachConsole(ir0)i.r0'
System::Call 'kernel32::GetStdHandle(i -11)i.r0' »
Не будет работать по одной простой причине (не понимаете, что для чего, нужно было в FindWindow изменить переменную на $0), вы опять невнимательно пользуетесь функцией "Копировать => Вставить", я бы вырезал данную возможность из ОС у таких "программистов", я даже боюсь за пользователей, которые получат ваш горе инсталлятор, в котором случайно можно перепутать переменные и под админом натворить чудес

Цитата Vincent7:
System::Call 'kernel32::GetStdHandle(i -11)i.r0'
FileWrite $1 "TEST" »
Опять же, несоответствие

Разве в моём примере было так?


---
Цитата kotkovets:
ExecDos отработает и усё - нет никакого окна после плага, видимого и невидимого
нужно, запускать не в режиме ожидания выполнения процесса.. »
Не, там фишка с ключем /NOUNLOAD /ASYNC, если их указать, то плаг запустить процесс параллельно установщику

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

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

Отправлено: 22:35, 01-12-2013 | #820



Компьютерный форум 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




 
Переход