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

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

 
MKN MKN вне форума

Ветеран


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

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


FileVersionInfo Header v1.2.2
читать дальше »
Код: Выделить весь код
/*

---------------------------------------------
        FileVersionInfo Header v1.2.2

          All Functions comes from:
      http://nsis.pastebin.com/f5e461c4d
              Written by Anders
       Collected and modified by JiaKe
---------------------------------------------

Copyright 2011 Nullsoft Install System

Usage in script:

!include "FileVerInfo.nsh"

[Section|Function]

 ${FileVerInfoFunc} FILEPATH $var

# $var=["error"|""|Result]
# "error": This version info doesn't exist
# "": This version info exsits but is blank
# Result: The value of this version info

[SectionEnd|FunctionEnd]

FileVerInfoFunc can be:
  [un.]GetFileVersion
  [un.]GetProductVersion
  [un.]GetProductName
  [un.]GetCompanyName
  [un.]GetFileDescription
  [un.]GetComments
  [un.]GetLegalCopyright
  [un.]GetLegalTrademarks
  [un.]GetInternalName
  [un.]GetOriginalFilename
  [un.]GetSpecialBuild
  [un.]GetPrivateBuild
  [un.]GetUserDefined <Userdefined Name>

---------------------------------------------

 Examples:
  ${GetCompanyName} $WINDIR\Notepad.exe $R0
  ${un.GetComments} $SYSDIR\registry.exe $R0

---------------------------------------------

*/

!ifndef FILEVERINFO_INCLUDED
!define FILEVERINFO_INCLUDED

!include Util.nsh
!include LogicLib.nsh

!verbose push
!verbose 3
!ifndef _FILEVERINFO_VERBOSE
  !define _FILEVERINFO_VERBOSE 3
!endif
!verbose ${_FILEVERINFO_VERBOSE}
!define FILEVERINFO_VERBOSE `!insertmacro FILEVERINFO_VERBOSE`
!verbose pop

!macro FILEVERINFO_VERBOSE _VERBOSE
  !verbose push
  !verbose 3
  !undef _FILEVERINFO_VERBOSE
  !define _FILEVERINFO_VERBOSE ${_VERBOSE}
  !verbose pop
!macroend

!macro GetFileVerInfoCall _VERINFO_STR_NAME _FILENAME_INPUT _VERINFO_OUTPUT
  !verbose push
  !verbose ${_FILEVERINFO_VERBOSE}
  Push `${_FILENAME_INPUT}`
  Push `${_VERINFO_STR_NAME}`
  ${CallArtificialFunction} GetFileVerInfo_
  Pop `${_VERINFO_OUTPUT}`
  !verbose pop
!macroend

!macro __DefineVersionInfoName _VERINFO_STR_NAME
  !define Get${_VERINFO_STR_NAME}    `!insertmacro GetFileVerInfoCall ${_VERINFO_STR_NAME}`
  !define un.Get${_VERINFO_STR_NAME} `!insertmacro GetFileVerInfoCall ${_VERINFO_STR_NAME}`
!macroend

!insertmacro __DefineVersionInfoName ProductName
!insertmacro __DefineVersionInfoName Comments
!insertmacro __DefineVersionInfoName CompanyName
!insertmacro __DefineVersionInfoName LegalCopyright
!insertmacro __DefineVersionInfoName FileDescription
!insertmacro __DefineVersionInfoName FileVersion
!insertmacro __DefineVersionInfoName ProductVersion
!insertmacro __DefineVersionInfoName InternalName
!insertmacro __DefineVersionInfoName LegalTrademarks
!insertmacro __DefineVersionInfoName OriginalFilename
!insertmacro __DefineVersionInfoName PrivateBuild
!insertmacro __DefineVersionInfoName SpecialBuild

!define GetUserDefined    `!insertmacro GetFileVerInfoCall`
!define un.GetUserDefined `!insertmacro GetFileVerInfoCall`

!macro GetFileVerInfo_

  !verbose push
  !verbose ${_FILEVERINFO_VERBOSE}

  Exch $R0
  Exch
  Exch $R1
  System::Store S
  System::Call `version::GetFileVersionInfoSize(tR1,*i)i.R2`
  IntCmpU $R2 0 +15
    System::Alloc $R2
    System::Call `version::GetFileVersionInfo(tR1,in,iR2,isR3)i.R4?e`
    Pop $R2
    IntCmpU $R2 0 0 +11 +11
    IntCmpU $R4 0 +10
      System::Call `version::VerQueryValue(iR3,t"\VarFileInfo\Translation",*i.R4,*i)i.R5`
      IntCmpU $R5 0 +8
      System::Call `*$R4(&i2.R6,&i2.R7)`
      IntFmt $R6 "%04x" $R6
      IntFmt $R7 "%04x" $R7
      System::Call `version::VerQueryValue(iR3,t"\StringFileInfo\$R6$R7\$R0",*i.R6,*i.R7)i.R8`
      IntCmpU $R8 0 +3
      System::Call `*$R6(&t$R7.s)`
      Goto +2
      Push `error`
    IntCmpU $R3 0 +2
    System::Free $R3
  System::Store L
  Exch 2
  Exch
  Pop $R1
  Pop $R0
  !verbose pop
!macroend
!endif

На базе этого кода, похоже сделан MoreInfo plugin http://nsis.sourceforge.net/MoreInfo_plug-in

Но и у FileVerInfo.nsh , и у MoreInfo plugin есть такая лажа - инфа из некоторых файлов получается только в виде первого символа...
Например, так происходит при снятии инфы у файла vcredist_x86.exe (MicrosoftVisual C ++ 2012 Redistributable)
https://www.microsoft.com/ru-ru/down....aspx?id=30679



Плагин и хедер, вроде как оч полезные, но и в то же время для некоторых случаев, бесполезные...
Как бы это исправить (исходники есть http://www.fdos.org/win32/nsis/plugi...fo.1.0.1.2.zip ) ?

Или хотя бы сделать внятным код для функции GetFileVersionInfo (и сопутствующих функций - см. код FileVersionInfo Header), чтобы определять параметры свойств файлов...

ps http://dictionary.cambridge.org/ru/p...танский/header

Последний раз редактировалось MKN, 09-04-2015 в 15:29.


Отправлено: 15:04, 09-04-2015 | #1561



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

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


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

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


Contributor


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

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


MKN, закомментируй в хидере строку
Код: Выделить весь код
!insertmacro __DefineVersionInfoName FileVersion
ругается из-за того, что макрос GetFileVersion уже есть

Цитата MKN:
Или хотя бы сделать внятным код для функции GetFileVersionInfo (и сопутствующих функций - см. код FileVersionInfo Header), чтобы определять параметры свойств файлов... »
Ну так, посмотреть в хидере, что доступно и прописать как команды, не?

Код: Выделить весь код
${GetProductName} "$WINDIR\explorer.exe" $0
${GetComments} "$WINDIR\explorer.exe" $1
${GetCompanyName} "$WINDIR\explorer.exe" $2
${GetLegalCopyright} "$WINDIR\explorer.exe" $3
${GetFileDescription} "$WINDIR\explorer.exe" $4
${GetProductVersion} "$WINDIR\explorer.exe" $5
${GetInternalName} "$WINDIR\explorer.exe" $6
${GetLegalTrademarks} "$WINDIR\explorer.exe" $7
${GetOriginalFilename} "$WINDIR\explorer.exe" $8
${GetPrivateBuild} "$WINDIR\explorer.exe" $9
${GetSpecialBuild} "$WINDIR\explorer.exe" $R0
насчет остального, правки исходников и разных глюков - это точно не ко мне, мне достаточно того, как я намучался при написании dll расширения оболочки для встраивания в контекстное меню файлов пункт для SFX Creator, C++ это не моё...

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


Отправлено: 15:36, 09-04-2015 | #1562

MKN MKN вне форума

Ветеран


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

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


Кстати и штатный ${GetFileVersion} - показывает только первый символ... Как определять версию файла vcredist_x86.exe... ? Ещё мне надо определять версии шрифтов... Существующие плагины тоже не помощники. Кое что, да кое когда определяют, а что надо - нет...
NSIS ни черта не умеет, за что не возьмись... Начинаю в нём разочаровываться... Разрабы этот продукт сделали для неискушенных в программировании пользователей, вроде как старались , а поддержать и расширять не хотят...
Цитата K.A.V.:
ругается из-за того, что макрос GetFileVersion уже есть »
Это понятно из сообщения. Что делать то ?

Последний раз редактировалось MKN, 11-04-2015 в 09:45.


Отправлено: 15:41, 09-04-2015 | #1563


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

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


Contributor


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

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


Цитата MKN:
Это понятно из сообщения. Что делать то ? »
Я же тебе выше ответил, закомментируй указанную строку, монитор запачкался что ли?

Цитата MKN:
Кстати и штатный ${GetFileVersion} - показывает только первый символ... Как определять версию файла vcredist_x86.exe... ? »
Ну, видимо, файл особенный, я без понятия, в чем проблема, не на всех же файлах отрабатывает без ошибок...

Цитата MKN:
NSIS ни черта не умеет, за что не возьмись... Начинаю в нём разочаровываться... »
Немножко умеет, раз его использовала не одна известная компания для создания инсталлеров для своих продуктов

Цитата MKN:
вроде как старались , а поддержать и расширять не хотят... »
Эта проблема всех FreeWare проектов, мне кажется, всё держится на энтузиазме создателей и у всех этот энтузиазм со временем проходит, не у всех есть желание вечно сидеть с красными глазами и пилить софт "для народа"

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


Отправлено: 16:10, 09-04-2015 | #1564

MKN MKN вне форума

Ветеран


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

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


Цитата K.A.V.:
закомментируй указанную строку »
Первым делом закомментил. Всё равно ошибки...
ps Интересно, а нет ли где конвертера из VBScript в NSIS ?

Отправлено: 16:19, 09-04-2015 | #1565


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

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


Contributor


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

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


Цитата MKN:
Первым делом закомментил. Всё равно ошибки... »
У меня нет ошибок и компилируется без проблем, если в коде только 2 указанных тобой инклуда, смотри, где у тебя ещё проблемы и на какие строки ругается...

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


Отправлено: 16:26, 09-04-2015 | #1566

MKN MKN вне форума

Ветеран


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

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


K.A.V.,
у меня такие ошибки :
Цитата:
Error in macro __DefineVersionInfoName on macroline 1
!include: error in script: "FileVerInfo.nsh" on line 97
97 строку комментирую. а что имеется ввиду под macroline 1 ?

Отправлено: 16:37, 09-04-2015 | #1567


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

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


Contributor


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

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


Цитата MKN:
а что имеется ввиду под macroline 1 ? »
Ошибка в первой строке в самом макросе
Например, если будет такой код макроса с "левым" текстом в первой строке:

Код: Выделить весь код
!macro __DefineVersionInfoName _VERINFO_STR_NAME
мой текст
  !define Get${_VERINFO_STR_NAME}    `!insertmacro GetFileVerInfoCall ${_VERINFO_STR_NAME}`
  !define un.Get${_VERINFO_STR_NAME} `!insertmacro GetFileVerInfoCall ${_VERINFO_STR_NAME}`
!macroend

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


Отправлено: 17:00, 09-04-2015 | #1568

MKN MKN вне форума

Ветеран


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

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


Цитата K.A.V.:
Например, если будет такой код макроса с "левым" текстом в первой строке: »
Нет там никакого левого текста. Хедер один в один , который я здесь привёл... Хоть комментируй в нём чего, хоть нет - не работает (если вместе с !include "FileFunc.nsh" )...

выложи пожалуйста твой рабочий комплект, а то я уже не знаю на что и думать. Может у меня в самом NSIS "комплекте" чего то не так...

Последний раз редактировалось MKN, 09-04-2015 в 17:14.


Отправлено: 17:06, 09-04-2015 | #1569


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

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


Contributor


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

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


Вложения
Тип файла: rar FileVerInfo.rar
(1.8 Kb, 4 просмотров)

Цитата MKN:
Нет там никакого левого текста. Хедер один в один , который я здесь привёл... Хоть комментируй в нём чего, хоть нет - не работает (если вместе с !include "FileFunc.nsh" )... »
Ну не знаю, в чем там у тебя проблема, пробовал пустой код компилить только с этими инклудами?
У меня на NSIS 3.0b1 всё нормально компилится и работает

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


Отправлено: 17:54, 09-04-2015 | #1570



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




 
Переход