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

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

Закрытая тема
Настройки темы
[архив].: NSIS - все вопросы :.

Аватара для kotkovets

Ветеран


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


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

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


Изменения
Автор: volk1234
Дата: 09-12-2012
Описание: перевод темы в архив.
Тема закрыта!
Лимит страниц.
Продолжение тут:
.: NSIS - все вопросы :. часть 2.
Старая шапка:
читать дальше »

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

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


Текущая версия: 2.46 от 6 декабря 2009 года
Скачать | Архив сборок версии 2 | Архив сборок версии 1

ВНИМАНИЕ! Созданный в NSIS инсталлятор является ANSI-приложением. Есть возможность использовать UNICODE-сборку системы, но при этом ваши дистрибутивы не будут работать в ANSI-системах, таких, как Windows 9x. Для загрузки UNICODE-сборки системы посетите сайт: http://www.scratchpaper.com/

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

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

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

Плагины и полезности к NSIS: http://nsis.sourceforge.net/Category:Plugins

Интерфейс Venis GUI: http://www.spaceblue.com/products/venis
Интерфейс ExperienceUI GUI http://experienceui.xx0r.info/oldeng...erienceui/home
Пример:


Интерфейс SkinCrafter Plugin - http://www.skincrafter.com/
Пример:

Инструкция по использованию от K.A.V.

Примеры скриптов на нашем форуме
Скрипт 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, если хотите скрыть некоторые файлы в вашей инсталляции.


===========
тема прикрепляется, шапка будет дорабатыватся... Volk1234, hb860

Отправлено: 23:35, 17-06-2006

 

Аватара для kotkovets

Ветеран


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

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


Цитата onis:
мне сделать регистрацию »
самый простой вариант:
Код: Выделить весь код
RegDll "путь\ac3filter.ax"
или так:
Код: Выделить весь код
ExecWait '$SYSDIR\RegSvr32.exe /s "путь\ac3filter.ax"'
Разрегистрация:
Код: Выделить весь код
UnRegDll "путь\ac3filter.ax"
или так:
Код: Выделить весь код
ExecWait '$SYSDIR\RegSvr32.exe /s /u "путь\ac3filter.ax"'

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

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

Отправлено: 16:26, 23-06-2011 | #1281



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

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


Аватара для sk07

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


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

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


начитавшись, я правильно понял, что невозможно "выдрать" скрипт из инсталлятора ?

Отправлено: 15:03, 28-06-2011 | #1282


Аватара для Hector

Misanthrope


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

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


sk07, да, правильно

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 15:11, 28-06-2011 | #1283


Аватара для sawe

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


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

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


Не могу разобраться с логикой.
В случае повторной установки (поверх), нужно что бы один файл не переписывался заново и тем более не удалялся, а сохранялся под новым именем.

Что то вроде этого, но не могу понять, как взять именно последнюю цифру
читать дальше »

Код: Выделить весь код
  IfFileExists "$INSTDIR\lang\Russian_old.xml" 0 noInt
  IfFileExists "$INSTDIR\lang\Russian_old_1.xml" 0 +2
  StrCpy $0 Russian_old_1.xml -1 -5
  IfFileExists "$INSTDIR\lang\Russian_old_2.xml" 0 +2
  StrCpy $0 Russian_old_2.xml -1 -5
  ; и так далее ......
 noInt:
  IntOp $0 $0 + 1
  CopyFiles /silent "$INSTDIR\lang\Russian_old.xml" "$INSTDIR\lang\Russian_old_$0.xml"
  Goto noRuss
  IfFileExists "$INSTDIR\lang\Russian.xml" +2
  Rename "$INSTDIR\lang\Russian.xml" "$INSTDIR\lang\Russian_old.xml"
 noRuss:

--

Последний раз редактировалось sawe, 04-07-2011 в 21:32.


Отправлено: 21:25, 04-07-2011 | #1284


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

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


Contributor


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

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


Если точно знаете, что число будет с одной цифрой, могу предложить самый быстрый и простой вариант

Код: Выделить весь код
StrCpy $0 "Russian_old_2.xml" "" -5
StrCpy $0 "$0" 1

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


Отправлено: 21:50, 04-07-2011 | #1285


Аватара для kotkovets

Ветеран


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

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


Цитата sawe:
как взять именно последнюю цифру »
А че ее брать, отсчитываем с конца 5 символов и берем 1 последующий символ
Код: Выделить весь код
StrCpy $0 Russian_old_1.xml 1 -5
Цитата sawe:
Не могу разобраться с логикой »
Цитата sawe:
IfFileExists "$INSTDIR\lang\Russian_old_1.xml" 0 +2
StrCpy $0 Russian_old_1.xml -1 -5
IfFileExists "$INSTDIR\lang\Russian_old_2.xml" 0 +2
; и так далее ...... »
А не кажется ли вам, что здесь только циклом, судя по последней увеличивающейся цифре? опредилитесь с условием выхода из цикла и посмотрите в сторону логических конструкций - с ними куда проще работать.

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


Отправлено: 22:12, 04-07-2011 | #1286


Аватара для sawe

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


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

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


При каждой последующей установке, что бы последняя (старшая) цифра увеличивалась на +1

IntOp $0 $0 + 1 ;прибавляет 1

Как определить последнюю 1,2,3,4,5.....9 цифру, пускай будет один разряд.

Код: Выделить весь код
   = $0 > $0
--

Отправлено: 22:22, 04-07-2011 | #1287


Аватара для kotkovets

Ветеран


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

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


Цитата sawe:
Не могу разобраться с логикой.
В случае повторной установки (поверх), нужно что бы один файл не переписывался заново и тем более не удалялся, а сохранялся под новым именем. »
Все достаточно просто, создайте рядом со скриптом Текстовый документ.txt и каждый следующий запуск будет прибавлять единицу к имени файла и так до 1000 - потом "обнулится" до единицы - этого вполне достаточно.
Код: Выделить весь код
OutFile "setup.exe"
!include "logiclib.nsh"
ShowInstDetails show

Section
#******************************************************************************************
    StrLen $2 "Текстовый документ_old_"        ;получаем число символов для поиска по маске
    StrLen $6 "Текстовый документ_old_1.txt"   ;получаем число символов до old_9
    StrLen $7 "Текстовый документ_old_100.txt" ;получаем число символов до old_1000
#******************************************************************************************
    ${If} ${FileExists} "$EXEDIR\Текстовый документ.txt"
         Rename "$EXEDIR\Текстовый документ.txt" "$EXEDIR\Текстовый документ_old.txt"
    ${ElseIf} ${FileExists} "$EXEDIR\Текстовый документ_old.txt"
         Rename "$EXEDIR\Текстовый документ_old.txt" "$EXEDIR\Текстовый документ_old_1.txt"
    ${Else}
         FindFirst $0 `$1` "$EXEDIR\*.txt" ;ищем все файлы с расширением txt
         ${DoUntil} `$1` == ``             ;в переменную $1 получаем в цикле имена файлов
             StrCpy `$3` `$1` $2           ;берем $2 символов с получаемых имен файлов и результат в $3
             ${If} `$3` == "Текстовый документ_old_"  ;сравниваем результат по маске
                 StrLen $5 `$1`                       ;получаем число символов из файла
                 ${IfThen} $5 <= $6 ${|}StrCpy $4 `$1` 1 -5${|} ;если $4 < old_9 берем 1 символ
                 ${IfThen} $5 > $6 ${|}StrCpy $4 `$1` 2 -6${|}  ;если $4 > old_9 берем 2 символа
                 ${IfThen} $5 >= $7 ${|}StrCpy $4 `$1` 3 -7${|}  ;если $4 > old_99 берем 3 символа
                 IntOp $4 $4 + 1
                 Rename "$EXEDIR\$1" "$EXEDIR\$3$4.txt"
                 DetailPrint "$3$4.txt"
                 ${Break} ; выход из цикла
              ${EndIf}
              FindNext $0 $1
         ${Loop}
         FindClose $0
    ${EndIf}
    
SectionEnd

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


Последний раз редактировалось kotkovets, 05-07-2011 в 01:16.


Отправлено: 01:10, 05-07-2011 | #1288


Аватара для sawe

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


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

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


Спасибо, что откликнулись!

kotkovets
Не совсем то, пример работает только с одним файлом, старые не сохраняет, но мысль понятна, остальное сам доведу.

И ещё один вопрос, используя MUI2 - nsDialog, уже в готовом и отлаженом скрипте, что бы его не уродовать, хотелось бы простым способом заглушить CheckBox. Что бы CheckBox был отмечен, и пользователь не мог выбрать действие.

В InstallOptions это легко реализуется установкой флага, в nsDialog это намного сложнее.

Отправлено: 01:55, 05-07-2011 | #1289


Аватара для kotkovets

Ветеран


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

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


Цитата sawe:
И ещё один вопрос, используя MUI2 - nsDialog, уже в готовом и отлаженом скрипте, что бы его не уродовать, хотелось бы простым способом заглушить CheckBox. Что бы CheckBox был отмечен, и пользователь не мог выбрать действие.
В InstallOptions это легко реализуется установкой флага, в nsDialog это намного сложнее. »
ИМХО!!! все очень просто, в переменной $CheckBox - хэндл чебокса, а если есть хэндл делаем все, что хотим....
InstallOptions - устаревшая вещь, nsDialogs намного больше возможностей, а если еще в паре с system.dll, можно делать почти всё - средствами Win API

Код: Выделить весь код
OutFile "winreview.exe"
ShowInstDetails show

Var Dialog
Var CheckBox

Function fnCustomInit
    nsDialogs::Create 1018
    Pop $Dialog
       
       ${NSD_CreateCheckBox} 0 45u 120u 10u "Нельзя отметить флажком"
       Pop $CheckBox
       ${NSD_SetState} $CheckBox 1 ;отмеченный чебокс
       EnableWindow $CheckBox 0 ;глушим чебокс
       
   nsDialogs::Show
FunctionEnd

Function fnCustomDestroy
   ${NSD_GetState} $CheckBox $0
     
FunctionEnd

Section
   StrCmp $0 1 0 +2
   MessageBox MB_ICONINFORMATION|MB_OK "чебокс отмеченный" IDOK
SectionEnd

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


Отправлено: 03:46, 05-07-2011 | #1290



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Мультимедиа - WinAmp .:[ обсуждение всех версий ]:. ssaram Программное обеспечение Windows 406 12-02-2022 19:45
WinstyleMonitor .:[все вопросы]:. Mr dUSHA Проект WinStyle 331 12-02-2014 13:15
Delphi - Delphi .: [все вопросы] :. Serega Программирование и базы данных 94 04-05-2013 18:45
Доступ - Никак не удаляются файлы (AVI и все остальные форматы) .:[все вопросы]:. Microsoft Windows 2000/XP 105 30-06-2010 11:58
Вопросы по создателю инсталляций NSIS MaxDELETE Программное обеспечение Windows 14 04-07-2007 10:01




 
Переход