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

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

 

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


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

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


Всем доброго времени суток.
Столкнулся с двумя проблемами.
В папке $WINDIR\System32\drivers\ хочу удалить файл .sys. В семерке этот файл спокойно удаляется с помощью макроса и команды:
Скрытый текст
Код: Выделить весь код
!insertmacro DisableX64FSRedirection
Delete "$WINDIR\System32\drivers\test.sys"
!insertmacro EnableX64FSRedirection

В десятке почему то не удаляется. Когда начал пробовать в десятке удалить его вручную, то он пишет, что занят процессом. Но IObit Unlocker показывает, что никаким процессом он не занят и командой "разблокировать и удалить" спокойно его удаляет.
Вот такой вопрос, имеется ли в nsis команда типа "снять все атрибуты, разблокировать и удалить", чтобы удалялся в десятке файл, как это делает IObit Unlocker?
И вторая проблема.
Имеется батник - это вполне рабочий генератор случайного 32 значного кода с записью в нужную область реестра:
Скрытый текст
Код: Выделить весь код
@echo off
cls
 
@echo.
@echo.
 
call :randomizeSequence 32 sequence
@echo sequence = '%sequence%'
 
REG ADD HKLM\Software\Test/v TestId /t REG_SZ /d %sequence% /f
 exit /b
 
:randomize
    set MIN=%1
    set MAX=%2
    set /A %3=%MIN% + (%MAX% - %MIN% + 1) * %random% / 32768
exit /b
 
:fillArray
    set "array[%cnt%]=%1"
    set /a cnt +=1
exit /b
 
:initialRandomize
    if defined ALREADYINIT (exit /b)
    set ALREADYINIT=true

    for %%a in ( 1  2  3  4  5  6  7  8  9  a  b  c  d  e  f  g) do (
        call :fillArray %%a  
    )
exit /b
 
:accumulate
    call :randomize 1 15 index
    call set "char=%%array[%index%]%%"
    call set "%dst%=%%%dst%%%%char%"
exit /b
 
:randomizeSequence
    set len=%1
    set dst=%2
    call :initialRandomize
    for /L %%a in (1 1 %len%) do (
        call :accumulate %%a
    )
exit /b

Помогите, пожалуйста сделать то же самое, что в батнике только кодом.

Отправлено: 06:15, 12-06-2020 | #2441



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

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


Старожил


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

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


Цитата inco1:
имеется ли в nsis команда типа "снять все атрибуты, разблокировать и удалить", чтобы удалялся в десятке файл, как это делает IObit Unlocker? »
Нет.
Если "IObit Unlocker показывает, что никаким процессом он не занят и командой "разблокировать и удалить" спокойно его удаляет", то он, скорее всего, чего-то не договаривает (дабы не перегрузить пользователю мозг технической информацией ).

Цитата inco1:
Имеется батник - это вполне рабочий генератор случайного 32 значного кода »
Можно сгенерировать GUID и отфильтровать до [0-9A-F]
Скрытый текст
макрос ${GetRandomHexStringG} OUTPUT LENGTH
Запишет в переменную OUTPUT строку длиной:
LENGTH символов для 1 <= LENGTH <= 32
32 символа для других значений
Код: Выделить весь код
!include "Util.nsh"

!define GetRandomHexStringG '!insertmacro GetRandomHexStringG'

!macro GetRandomHexStringG OUTPUT LENGTH
	Push ${LENGTH}
	${CallArtificialFunction} GetRandomHexStringG_
	Pop ${OUTPUT}
!macroend

!macro GetRandomHexStringG_
	Push $0 ; result string 
	Exch
	Exch $1 ; result chars count
	Push $2 ; guid string
	Push $3 ; length of guid string
	Push $4 ; counter
	Push $5 ; temp / char 
	
	StrCpy $0 ''
	System::Call 'ole32::CoCreateGuid(g .r2)'
	StrLen $3 $2
	IntOp $3 $3 - 1 ; to skip last curly bracket
	StrCpy $4 1 ; to skip first curly bracket
	
	Loop:
		IntCmp $4 $3 ExitLoop 0 ExitLoop
		StrCpy $5 $2 1 $4
		
		IntOp $4 $4 + 1
		StrCmp $5 '-' Loop
		
		StrCpy $0 $0$5
		IntOp $1 $1 - 1
		IntCmp $1 0 ExitLoop
		Goto Loop
	ExitLoop:
	
	Pop $5
	Pop $4
	Pop $3
	Pop $2
	Pop $1
	Exch $0
!macroend
пример:
Код: Выделить весь код
	${GetRandomHexStringG} $9 10
	DetailPrint "result $9"
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:54, 12-06-2020 | #2442


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


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

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


iglezz,
Цитата:
Можно сгенерировать GUID и отфильтровать до [0-9A-F]
Я понял, что ничего не понял. Что конкретно нужно прописать в строку добавления в реестр WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Test" "TestId" "?" , чтобы с вашего кода прописывалось 32 значное случайное число?

Отправлено: 21:27, 12-06-2020 | #2443


Старожил


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

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


inco1,
Код: Выделить весь код
${GetRandomHexStringG} $0 32 ; записать сгенерированное значение (32 символа) в $0
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Test" "TestId" "$0" ; записать $0 в реестр
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:32, 12-06-2020 | #2444


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


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

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


iglezz, Спасибо, буду пробовать.

PS. Всё отлично работает. Правда буквы заглавные, но это не критично. Спасибо.

Последний раз редактировалось inco1, 12-06-2020 в 23:01.


Отправлено: 22:39, 12-06-2020 | #2445


Старожил


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

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


Цитата inco1:
Правда буквы заглавные, но это не критично. »
Вот такой вариант генератора позволяет задавать регистр
Код: Выделить весь код
!define GetRandomHexStringRL '!insertmacro GetRandomHexStringR x'
!define GetRandomHexStringRU '!insertmacro GetRandomHexStringR X'

!macro GetRandomHexStringR CASE OUTPUT LENGTH
	Push ${LENGTH}
	Push ${CASE}
	${CallArtificialFunction} GetRandomHexStringR_
	Pop ${OUTPUT}
!macroend

!macro GetRandomHexStringR_
	Exch $0 ; 'x'/'X'
	Exch
	Exch $1 ; length
	Push $2 ; 
	Push $3 ; 
	Push $4 ; 
	Push $5 ; 
	Push $R0 ; CSP handle returned by CryptAcquireContext()
	Push $R1 ; buffer address for data generated by CryptGenRandom()
	
	System::Alloc 32
	Pop $R1
	
	System::Call "advapi32::CryptAcquireContext(*i.R0, i0, i0, i1, i0x40)"
	System::Call "advapi32::CryptGenRandom(iR0, i32, iR1)"
	System::Call "advapi32::CryptReleaseContext(iR0, i0)"
	
	System::Call "*$R1(&i4.r2, &i4.r3, &i4.r4, &i4.r5)"
	System::Free $R0
	
	StrCpy $R0 "%08$0"
	IntFmt $2 $R0 $2
	IntFmt $3 $R0 $3
	IntFmt $4 $R0 $4
	IntFmt $5 $R0 $5
	
	StrCpy $0 $2$3$4$5 $1
	
	Pop $R1
	Pop $R0
	Pop $5
	Pop $4
	Pop $3
	Pop $2
	Pop $1
	Exch $0
!macroend
Пример:
Код: Выделить весь код
${GetRandomHexStringRL} $0 32 ; lowercase
${GetRandomHexStringRU} $0 32 ; uppercase
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:20, 13-06-2020 | #2446

MKN MKN вне форума

Ветеран


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

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


Для генерации стандартного 32 значного GUID, вроде как достаточно :

Код: Выделить весь код
OutFile CreateGuid-test.exe
!include "WordFunc.nsh"

Section
System::Call 'OLE32::CoCreateGuid(g.R0)'
${StrFilter} "$R0" "-" "" "" $R1
MessageBox MB_OK "$R1"
SectionEnd
(${StrFilter} из WordFunc.nsh используем для смены регистра)
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:24, 13-06-2020 | #2447


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


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

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


iglezz,
Цитата:
Вот такой вариант генератора позволяет задавать регистр
Это то. что я хотел. Спасибо.

Рано я обрадовался. Тот первый вариант, что только с верхним регистром отлично вносит 32 знака в реестр и на семерке и на десятке.
Этот вариант с нужным мне нижним регистром вносит 32 знака в реестр только на семерке. На десятке вносит 32 нуля.

MKN, А как я могу прикрутить ваш код , чтобы добавлялось 32 знака из цифр и нижнего регистра в нужную ветку реестра?

Последний раз редактировалось inco1, 13-06-2020 в 13:33.


Отправлено: 11:53, 13-06-2020 | #2448

MKN MKN вне форума

Ветеран


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

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


inco1,
Очевидно же :
Код: Выделить весь код
OutFile CreateGuid-test.exe

Section
System::Call 'OLE32::CoCreateGuid(g.R0)'
MessageBox MB_OK "$R0"
SectionEnd

Отправлено: 14:41, 13-06-2020 | #2449


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


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

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


MKN,
Это вообще не то. Я же выложил батник, он генерирует такой код d2b7daaed38c3532d7d7aa6895fb96ge
iglezz выложил код, который отлично генерит в верхнем регистре 848D8134AB514E70ABE491A6551B5E99
Потом он выложил код с нижним регистром, но который генерит только в семерке, но не хочет генерить в десятке - записывает ноли.
Вы выложили код, который генерит следующее {AE68BE6F-43A2-1FB4-423D-D0C358720163} это не то, что я спрашивал.

Отправлено: 15:08, 13-06-2020 | #2450



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




 
Переход