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

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

 

Старожил


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

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


Цитата динозавра:
утем тыка обнаружил, что адекватно себя ведет тест, если применить RequestExecutionLevel highest. »
Моя ошибка, давно в эту тему не влазил...

Цитата динозавра:
Но теперь мне не понятно какие привилегии потеряет установщик с RequestExecutionLevel highest в отличие от RequestExecutionLevel admin. »
Установщик - никаких, это пользовательское понятие.
В описании RequestExecutionLevel есть ссылка на статью MSDN с подробностями.
user == asInvoker
highest == highestAvailable

Отправлено: 14:46, 27-01-2021 | #2541



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

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


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


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

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


Хотел подытожить. Для многих будет очень познавательно. Три рабочих примера.

Пример 1
Код: Выделить весь код
  Unicode true
OutFile "1-test.exe"
!Include "LogicLib.nsh"
RequestExecutionLevel highest
Function .onInit
System::Call setupapi::IsUserAdmin()i.r0
${If} $0 = 1
MessageBox MB_OK|MB_ICONINFORMATION "Есть права администратора"     
${Else}
MessageBox MB_OK|MB_ICONINFORMATION "Нет прав администратора. До свидания !"
Quit
${EndIf}
FunctionEnd
Section
SectionEnd

Пример 2
Код: Выделить весь код
  Unicode true
OutFile "2-test.exe"
!Include "LogicLib.nsh"
RequestExecutionLevel highest
Function .onInit
System::Call setupapi::IsUserAdmin()i.r0
Pop $0
${If} $0 = "admin"
MessageBox MB_OK|MB_ICONINFORMATION "Нет прав администратора. До свидания !"
Quit
${EndIf}
MessageBox MB_OK|MB_ICONINFORMATION "Есть права администратора"
FunctionEnd
Section
SectionEnd

Пример 3 для конкретики для кого запрет
Код: Выделить весь код
  Unicode true
OutFile "3-test.exe"
!Include "LogicLib.nsh"
RequestExecutionLevel highest
Function .onInit
UserInfo::GetAccountType
Pop $1
${If} $1 == "Guest"
${OrIf} $1 == "User"
MessageBox MB_OK|MB_ICONINFORMATION "Нет прав администратора. До свидания !"
Quit
${EndIf}
MessageBox MB_OK|MB_ICONINFORMATION "Есть права администратора" 
FunctionEnd
Section
SectionEnd

Эти примеры объединяет RequestExecutionLevel highest. По другому это совсем не работает.
Есть нюанс. В виста и семь с выключенным UAC - это когда системный настройщик уведомлений в крайнем нижнем положении и в восемь и десять с полностью выключенным UAC - это когда системный настройщик уведомлений в крайнем нижнем положении и нужные отключения в реестре.
В этом случае пользователи без прав не смогут запустить установщик, не двойным кликом, не от имени администратора. Как в ХР.
Если же системный настройщик уведомлений будет в другом положении, то пользователь без прав не сможет запустить установщик двойным кликом, но все же сможет запустить его от имени администратора.
Простыми словами: добиться Quit для пользователя без прав для установщика с большими привилегиями с включенным UAC не возможно. Исходя из того, что я написал эти коды на практике мало полезны. Зря потратил два дня на обобщение всего этого. Почему тогда этого нету в справке? Поправьте меня, если я ошибаюсь.

Последний раз редактировалось динозавра, 30-01-2021 в 13:48. Причина: Исправил грамматические ошибки


Отправлено: 13:31, 30-01-2021 | #2542


Ветеран


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

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


динозавра, может, потому, что это достаточно странные хотелки?

Отправлено: 15:35, 30-01-2021 | #2543


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


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

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


Iska, Не понял вопроса? В чем странность? В том, что в справочнике устаревший код, который работает только в ХР и об этом ничего не указано? Или в том, что я хочу сделать установщик, который бы не запускался с малыми правами пользователя без всяких от имени? Или странность в том, что я первый об этом очень подробно написал?

Отправлено: 16:10, 30-01-2021 | #2544


Старожил


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

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


динозавра,
Во-первых, второй пример не работает, т.к. после System::Call setupapi::IsUserAdmin()i.r0 в стеке ничего не появится и дальнейшее не имеет смысла.
Цитата динозавра:
Если же системный настройщик уведомлений будет в другом положении, то пользователь без прав не сможет запустить установщик двойным кликом, но все же сможет запустить его от имени администратора. »
В любом положении и в любой оси и не сможет запустить? "Несите новую ось, эта сломана!"
Серьёзно -- или система криво затвикана, или в исходных данных где-то ошибки.
Цитата динозавра:
Простыми словами: добиться Quit для пользователя без прав для установщика с большими привилегиями с включенным UAC не возможно. Исходя из того, что я написал эти коды на практике мало полезны. Зря потратил два дня на обобщение всего этого. Почему тогда этого нету в справке? Поправьте меня, если я ошибаюсь. »
Чего именно нет в справке и какая справки имеется в виду?

Пока вижу, что выложенные скрипты для полноценного тестирования условий запуска и получаемых результатов не содержат.
Так-же подозреваю, что решать-то надо совсем другую задачу. Стоит её озвучить.

Ибо происходящее похоже на типичную XY-проблему.

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

Отправлено: 16:28, 30-01-2021 | #2545


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


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

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


iglezz,
Цитата:
Во-первых, второй пример не работает, т.к. после System::Call setupapi::IsUserAdmin()i.r0 в стеке ничего не появится и дальнейшее не имеет смысла.
Во-первых, я не знаю, чего должно появиться в стеке, но второй пример работает, точно как и первый и третий.
Цитата:
В любом положении и в любой оси и не сможет запустить? "Несите новую ось, эта сломана!"
Серьёзно -- или система криво затвикана, или в исходных данных где-то ошибки.
Тут меня извините, я не правильно выразился, а вы не правильно поняли. Системный настройщик уведомлений я тестировал на всех системах по умолчанию, на нескольких 32 и 64. Установщик по двойному клику запустится, но сработает, как и надо Quit. Но его просто можно запустить от имени и никакой Quit уже не сработает.
Цитата:
Чего именно нет в справке и какая справки имеется в виду?
В нашей справке. Не указано, что тот код, что там, и мои в том числе работают только в ХР, ну еще на других с полностью отключенным UAC. С включенным UAC по рекомендованному умолчанию любой бесправный пользователь от имени установит прогу или чего там. Нужно только паролить.
Юмор ценю. Спасибо.
Чуть не забыл, вот видео, как в стеке ничего не появляется и дальнейшее не имеет смысла https://streamable.com/9hr0vi

Отправлено: 18:12, 30-01-2021 | #2546


Старожил


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

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


Цитата динозавра:
Во-первых, я не знаю, чего должно появиться в стеке, но второй пример работает, точно как и первый и третий. »
Цитата динозавра:
Чуть не забыл, вот видео, как в стеке ничего не появляется и дальнейшее не имеет смысла https://streamable.com/9hr0vi »
Если стек пуст, то содержимое регистра останется неизменным. В обсуждаемом примере это так и только поэтому сия конструкция работает (повезло). Зато потом, по мере усложнения скрипта, запросто вылезут сюрпризы.

Цитата динозавра:
Тут меня извините, я не правильно выразился, а вы не правильно поняли. Системный настройщик уведомлений я тестировал на всех системах по умолчанию, на нескольких 32 и 64. Установщик по двойному клику запустится, но сработает, как и надо Quit. Но его просто можно запустить от имени и никакой Quit уже не сработает. »
Скрипт в любом случае работает как надо, но непонимание того, как оно работает в сочетании с неясным ТЗ даёт результат "не работает".

Для начала стоит конкретизировать условия (мини-ТЗ) и только потом уже подбирать решение.
Если будет необходимость продолжать реализацию на UserInfo/IsUserAdmin, то предварительно следует изучить вывод этих команд при разных условиях запуска без условий {If/Else} -- тупо вызвать, забрать значение и вывести его в DetailPrint/MessageBox).
А потом ещё, по-хорошему, следует проверить и наличие конкретных привилегий у пользователя (на запись в фс/реестр, ...) ...
Ради чего это всё? Оно точно надо?

Может всё-таки подобрать более популярное решение?

Цитата динозавра:
Юмор ценю. Спасибо. »
Этот юмор демонстрирует довольно серьёзную проблему, от которой и плодится велосипедостроение со всеми сопутствующими проблемами, выливающимися в "(Windows|Linux|MacOs|SomeSoftwareName) - глюкало|тормозило|отстой!"
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:34, 30-01-2021 | #2547


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


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

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


iglezz,
XY-проблема. Читал углубленно.
Напишу как было.
При неком разговоре один грамотный человек мне сказал следующее: "Для инсталлятора с высокими правами, который будет применяться в системах с включенным UAC не существует железного способа автоматической отмены установки, если пользователь оказался с малыми правами. Это закончилось в эпоху ХР".
Объяснять он не стал, господь не дал ему такой способности. Я насобирал в инете примеров авто отмены по привилегиям и решил доказать обратное. Но, увы все оказалось истинной. Потом я задал вопрос здесь, в надежде, что тут уже чего то придумали. Но тут началось обсуждение проблемы Y вместо X, на основе Z, почти не касаясь X.
Подтянутся знатоки с регалиями, и не прочитав или не поняв фразы, которую сказал мне один грамотный человек подытожат XY на основе Z. Проще говоря весь смысл сведется к "сам дурак".
Так что вопрос исчерпан.
ЗЫ. Если у меня с вами проблема XY происходит по недоразумению из-за моей глупости, то в мировой политике сплошь и рядом и преднамеренно. Это шутка. Общие Правила конференции не нарушены.

Отправлено: 22:09, 30-01-2021 | #2548


Старожил


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

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


динозавра,
Цитата:
При неком разговоре один грамотный человек мне сказал следующее: "Для инсталлятора с высокими правами, который будет применяться в системах с включенным UAC не существует железного способа автоматической отмены установки, если пользователь оказался с малыми правами. Это закончилось в эпоху ХР". »
Вот плохо, что человек объяснять не стал, ибо неточные формулировки могут допускать разночтения, ведущие к потерям времени на ненужные дискуссии и ковырялово в поисках информации/доказательной базы.
Конкретно эта формулировка не имеет смысла, т.к. в случае установщика, требующего админских прав, будет запрос UAC на старте. Прошёл - теперь права точно есть, установщик запускается и спокойно отрабатывает. А нестандартные сценарии должны быть головной болью админа системы, не сборщика установщика.
А в случае установщика, которому где-то внутри нужны админские права, проверка прав ведёт к всё тому-же UAC, т.к. до него о наличии прав у пользователя достоверно неизвестно.

Внутри установщика интересоваться админскими правами имеет смысл для ситуации, когда кроме обычной многопользовательской установки предлагается установка "только для текущего пользователя", установка портативки, и есть желание не дурить пользователю голову UAC'ом в этих случаях. Для этого есть в стандартной поставке плагин UAC.

Цитата динозавра:
Потом я задал вопрос здесь, в надежде, что тут уже чего то придумали. »
Не придумали, так как смысла велосипеды изобретать при наличии работающего механизма нет.
Цитата динозавра:
Но тут началось обсуждение проблемы Y вместо X, на основе Z, почти не касаясь X. »
Так часто случается в условиях недостатка конкретики...
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:57, 31-01-2021 | #2549


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


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

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


iglezz,
Цитата:
Так часто случается в условиях недостатка конкретики...
Я же написал, что вопрос исчерпан, а вы все философствуете. Не смогли услышать и понять, ну и ладно.
У вас не XY-проблема, а проблема начальника
Философствуйте дальше.

Отправлено: 12:04, 31-01-2021 | #2550



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




 
Переход