Ru-Board.club
← Вернуться в раздел «Программы»

» NSIS (Nullsoft Scriptable Install System)

Автор: david141
Дата сообщения: 13.04.2011 11:27
Легко сказать всё заново написать. Но очень мало опыта в NSIS.
У автора исходника из этой статьи: http://mike.kaply.com/2007/07/19/rebranding-the-firefox-installer/ вроде как получается.
Автор: Victor_VG
Дата сообщения: 13.04.2011 11:49
david141

И должно получаться если он собственные либы применяет. Я их использую, да, но свою ProcLib.nsh я давно под GPL открыл, а другой человек мог поступить иначе, либо просто забыть про эти библиотеки и распишитесь и получите - тупик. Что как я понимаю мы и видим. Вы бы батенька для начала более простые задачи научились решать, а сложные от Вас не уйдут. Нельзя сразу научится летать на истребителе - сначала надо У-2 освоить, а Вы пытаетесь сразу за штурвал МиГ-19 сесть минуя У-2. Ну, колом в землю глядишь и слетаете … один раз.
Автор: sawerx
Дата сообщения: 14.04.2011 01:18

Цитата:
Легко сказать всё заново написать. Но очень мало опыта в NSIS.

Victor_VG - вам правильно ответил, запускаешь МАСТЕР в редакторе HM NIS,
он быстро генерирует готовый скрипт, копию его где нибудь сохраняешь, на всякий случай если напортачишь.
Далее пытайся вставлять куски кода из того примера или свои, если есть и отлаживай.
Поверь это намного быстрее, нежели тот навороченный мусор отладить.
Автор: david141
Дата сообщения: 15.04.2011 05:49
Тогда у меня три вопроса если можно.
Как сделать такое окно после окна приветствия?


Как сделать выбор браузера по умолчанию?


Как сделать так чтобы файлы были не в setup.exe а подхватывались из папки во время установки?


СПАСИБО.
Автор: Victor_VG
Дата сообщения: 15.04.2011 08:12
david141

Первые два - MUI с выбором параметров секций, третий достаточно прост - File <путь к источнику>. Но я Вам этот вариант делать не советую - он для Вас сейчас слишком сложен. Учитесь более простых вещах или если не хотите никого слушать - маны в руки и вперёд, но тогда "SOS" не кричать, белый флаг не выкидывать - не желающих учится, но желающих всё на блюдечке с голубой каёмочкой получать, считают не обучаемыми, и им не помогают, по крайней мере я сию "благотворительность" не осуществляю.
Автор: david141
Дата сообщения: 15.04.2011 08:33
Спасибо 'великий мастер' за помощь.
Автор: SpoinT
Дата сообщения: 15.04.2011 10:38
Друзья, всю голову сломал Можете привести пример с отменой установки? В инете примеры какие-то кривые, в справке инфы мало.


Код: !define MUI_PAGE_CUSTOMFUNCTION_SHOW InstFilesShow
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE InstFilesLeave
!insertmacro MUI_PAGE_INSTFILES


Function InstFilesShow
GetDlgItem $0 $HWNDPARENT 2
EnableWindow $0 1
FunctionEnd

Function instfilesLeave
IfAbort 0 +2
MessageBox MB_OK "user aborted"
FunctionEnd
Автор: dimbat
Дата сообщения: 15.04.2011 12:20
SpoinT
Вот этот пример подойдет, если я правильно понял задачу.
Автор: kot280379
Дата сообщения: 15.04.2011 13:53
david141
Советую, как и другие участники
http://narod.ru/disk/1645638001/NSIS_Help.zip.html
Автор: Victor_VG
Дата сообщения: 15.04.2011 20:23
kot280379

А он явно не обучаемый - иначе не требовал бы готового решения походя оскорбляя незнакомых, но исходно доброжелательно настроенных к нему людей, за то что ему сначала ответили о причине не решаемости его постановки, и порекомендовали сначала учится, а потом решать сложные задачи, а не требовать от людей "дайте мне готовое решение под ним свою подпись поставлю!:

Цитата:
Может, кто знает, что за ошибка?
Invalid command: ${LocateNoDetails}
Error in macro CopyFilesFromDir on macroline 34

Вот исходник: http://ifolder.ru/22925369 firefox-installer
Может, кто разберётся и выложит рабочий?

и ниже по тексту. Хотя ему чётко было отвечено - у данного автора собственные закрытые библиотеки, что видно из анализа исходников. Но, ему потребовалось самоутвердится банальным хамством:

Цитата:
Спасибо 'великий мастер' за помощь.

К batva его что ли отправить для воспитательной беседы поскольку извинятся у нонешних новичков не принято? У них просто принято - нахамил - пост заработал, а там трава не расти....
Автор: kot280379
Дата сообщения: 16.04.2011 11:17

Цитата:
А он явно не обучаемый

Это точно, ведь что нибудь написать или создать - надо жестко пахать, а ни кто не хочет разбираться, что и как, отсюда такие вопросы - на все готовое...

Цитата:
у данного автора собственные закрытые библиотеки

я бы на месте автора такое не стал выкладывать

Автор: Victor_VG
Дата сообщения: 16.04.2011 15:04
kot280379

Естественно, и я не все свои вещи выкладываю, а только то, что считаю возможным.
Автор: SamLab
Дата сообщения: 17.04.2011 15:32
Куда смотрят авторы NSIS вместо важных функций и недоработок (увеличение длины строки до 8192 байт вместо обычных 1024 или адаптер для загрузки картинок других форматов), они всякую дурость делают в виде rev6148: spam is for pork products only /nsisweb/trunk/mediawiki/LocalSettings.php
Автор: Victor_VG
Дата сообщения: 17.04.2011 18:31
SamLab

Да, уж глупость откровенная. Приходится с апдейтом стубы 1k на студы 8k заменять чтобы иметь запас для длинных текстовых либо командных строк. Тут я с тобой согласен полностью можно было бы сразу, на уровне исходников включить и поддержку длинных строк, и даже не до 8 Кб, а я бы предложил увеличить для случаев типа WriteRegBin допустимую длину строки и до больших значений, например до 32/64 Кб, интегрировать код логирования установки, два и самое главное привести в порядок работу со стеком и многоязычностью - сегодня это два самых слабых места NSIS. Первое может не определить язык, либо прописать его не так как нужно по алгоритму, а в стеке легко можно получить мусор, особенно при сбое любой операции затрагивающей регистры. Тут шансы порчи стека резко возрастают - они ведь хранятся в едином пуле памяти, и там сбои очень вероятны.
Автор: SamLab
Дата сообщения: 17.04.2011 18:38
Victor_VG
Трудно верится, что NSIS в текущем состоянии будет развиваться - это так - на предсмертные муки больше похоже - сейчас все не вспомнить, но приходилось довольно часто сталкиваться либо с отсутствием чего-то важного в NSIS по сравнению с тем же Inno либо если функция и есть - реализация ее ну неудобна
PS: Немного измененная версия ревизии 6149 от программиста с моего форума с изменениями длины строки и исправлением мелких ошибок типа языковых о которых я писал немного ранее - http://sourceforge.net/projects/remotemonitor/files/nsis-26-Jan-2010-rev6149-strlen-8192-setup.exe
Автор: sawerx
Дата сообщения: 17.04.2011 21:43

Цитата:
david141


Сразу скажу, что мне не понятно, что вы понимаете под фразой “Выборочная установка”.
Можно легко обойтись стандартными страницами NSIS
Страница компонентов с выбором типа установки
и в секции Компоненты – 2 и 3 вы найдёте решение с прикреплённым файлом.

Код:
; -- выбор для секции компонентов --!
!include Sections.nsh
Insttype "/CUSTOMSTRING= Ваш личный выбор"
Insttype " Стандартная установка" # SectionIn 1
Insttype " Выборочная установка" # SectionIn 2

; -- секции выбора компонентов --!
Section "!Firefox ${VERSION}"
SectionIn RO ; заглушка!
SectionEnd

SubSection /e "!Компоненты" ; ключ /e раскрывает список!
Section "Компоненты - 1"
SectionIn 1
SetOutPath $INSTDIR ; куда вставлять!
SetDateSave off ; не менять дату!
SetOverwrite ifnewer ; если новее или on перезаписывать или off не перезаписывать!
File "core\ваш_файл.exe" ; от куда брать!
; -- ваш дальнейший код --!
SectionEnd
Section /o "Компоненты - 2" ; ключ /o не активный по умолчанию!
SectionIn 2
BringToFront # скрывает окно копирования, то есть главное окно будет поверх окна копирования!
Copyfiles /SILENT "$EXEDIR\core\core_1.exe" $INSTDIR\core_1.exe # паравозик!
SectionEnd
Section /o "Компоненты - 3"
SectionIn 1 2
; или использовать простой но для этого цели очень эффективный банер SpiderBanner!
; Если используется плагин, его надо сначала скачать и поместить DLL в папку /Plugins
; и верхней части заголовка скрипта примерно после !include MUI.nsh поместить следующую строку
; ReserveFile "${NSISDIR}\Plugins\SpiderBanner.dll" ; зарезервировать плагин!

SpiderBanner::Show /NOUNLOAD /BR 200 ; запускается банер и скрывает главное окно!
Copyfiles /SILENT "$EXEDIR\core\core_2.exe" "$INSTDIR\core_2.exe" # паравозик!
SpiderBanner::Destroy ; закрывается банер и возвращяет главное окно!
SectionEnd
SubSectionEnd
; -- конец секций компонентов --!
Автор: Victor_VG
Дата сообщения: 17.04.2011 22:41
SamLab

Надо посмотреть. Главное для меня - наработанные проекты.
Автор: kot280379
Дата сообщения: 17.04.2011 23:07

Цитата:
а я бы предложил увеличить для случаев типа WriteRegBin допустимую длину строки и до больших значений, например до 32/64 Кб

Было бы даже очень прекрасно для всех случаев, хотя бы для разбора массива строк - быстродействие куда выше будет (пришлось по работе столкнуться, по быстрому написать поиск номеров телефонов по различным условиям и вывести список в Listview), а файл данных 20-30 Кб , приходится каждый раз к файлу обращаться, что притормаживает поиск, тем более на работе откровенно слабый комьютер.
Хотя понимаю NSIS не для этого рассчитан
В принципе уже на VB.NET поисковик сделал
Автор: yyv
Дата сообщения: 25.04.2011 11:12
Здравствуйте
Уже мозг сломал, пока ничего не могу придумать, Может вы что подскажете.
Есть такая задача.
Регулярно создается большое количество инсталлеров. Некоторые могут отличаться сильно по секциям и страницам, а в некоторый отличие только в значении переменных.
к примеру отличаються только названием программы и описанием
define PRODUCT_NAME "name test"
переменные задаются при генерации скрипта через ключ /D.
Стал вопрос можно ли на этот тип инсталлеров сделать один типовой а остальные данные брать из вне при установке программы. скажем читать черз ini файл?
пробовал в функции .onInit вызвать другую функцию
и прочитать эти данные
ReadINIStr $R1 "$TEMP\settings.ini" "PRODUCT_NAME" "Text"
!undef PRODUCT_NAME
!define PRODUCT_NAME $R1

но это работает не так как надо
значение переменной вроде заменяться
MessageBox MB_OK|MB_ICONSTOP "${PRODUCT_NAME}"
выводит именно то значение что прописано в settings.ini
но на страницах где должно отображаться PRODUCT_NAME отображается 0.
реально ли выполнить задачу под эти требования?
если да буду раз советам
с ув. Ярослав
Автор: Victor_VG
Дата сообщения: 25.04.2011 14:02
yyv

Можно, через подключение include. Сам такой фортель вечно проделываю и плюс к тому макросы в либах. Я решаю задачу таким приёмом.
Автор: yyv
Дата сообщения: 25.04.2011 14:50

Цитата:
Можно, через подключение include

а как заинклюдить файл которого еще нету?
я хотел через include, но ничего не вышло
в начале .onInit вызываю функцию
    call test
в test такой код

Код: ${GetOptions} $CMDLINE "/G=" $0
${IfNot} $0 == ""

!include    $TEMP\settings.nsh
${EndIf}
Автор: kot280379
Дата сообщения: 25.04.2011 17:39
yyv
Как один многочисленных вариантов - прост и достаточно эффективен
http://forum.oszone.net/post-1665405-1115.html
Автор: Victor_VG
Дата сообщения: 26.04.2011 02:43
yyv

Инклюды - это механизм времени компиляции, а вот после - тут надо специальный парсер писать, хотя можно что нибудь и придумать для этого. Просто с таким парсером надо садится с нуля - идея есть, это хорошо, но надо описать его формальный входной язык, а после алгоритмические процедуры для реализации. Хотя это и возможно сделать средствами самого NSIS, но это по большому счёту самостоятельная разработка, что потребует какого-то свободного времени только на неё. А я сейчас во времени ограничен.
Автор: sawerx
Дата сообщения: 31.05.2011 17:54
0
Автор: SamLab
Дата сообщения: 11.06.2011 02:25
NSIS 2.47 Preview (Build 10.06.2011) rev6153 (strlen 8192) with UPX 3.08 Dev
http://sourceforge.net/projects/remotemonitor/files/nsis-10-Jun-2011-rev6153-strlen-8192-setup.exe

Цитата:
Allow multiple !finalize commands
-------------------------------
M : /NSIS/trunk/Source/build.cpp
M : /NSIS/trunk/Source/build.h
M : /NSIS/trunk/Source/script.cpp
Автор: alroy
Дата сообщения: 07.07.2011 10:21
Здравствуйте может кто сталкивался с такой задачей нужно положить файл в папку автозагрузки например пользователя петр а делать я это буду из под другого пользователя как быть может кто уже решал такие задачи??
Автор: Victor_VG
Дата сообщения: 07.07.2011 11:55
alroy

А HKU зачем? Отыскиваете юзера по его ID и читаете Shell там и пути к каталогам будут. Только User ID надо точный знать, либо просто класть поиском по имени через LOCATION. Этот макрос отыщет указанное.
Автор: kot280379
Дата сообщения: 09.07.2011 19:21

Цитата:
Только User ID надо точный знать

себе как то делал так, определение SID пользователя, может кому и сгодится

Код: !include "MUI2.nsh"

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

ShowInstDetails show
OutFile Test.exe
Caption "GetUserSID"

!define GetUserSID "!insertmacro CallGetUserSID"
!macro CallGetUserSID SID
System::Store S
System::Call "kernel32::GetComputerName(t.r0, *i1024 r4)i.r2"
System::Call "advapi32::GetUserName(t.r1, *i1024 r5)i.r3"
${Unless} $2 = 0
${AndUnless} $3 = 0
System::Call "*(&t1024)i.r5"
System::Call "advapi32::LookupAccountName(t'\\$0',tr1,ir5,*i1024,t.r4,*i1024,*i.r0)i.r2"
${Unless} $2 = 0
System::Call "advapi32::ConvertSidToStringSid(ir5,*t.s)"
${Else}
Push error
${EndUnless}
${Else}
Push error
${EndUnless}
System::Store L
Pop "${SID}"
!macroend

Section
${GetUserSID} $R5
MessageBox MB_ICONINFORMATION|MB_OK "$R5" IDOK
SectionEnd
Автор: Victor_VG
Дата сообщения: 11.07.2011 05:10
kot280379

Если не возражаете, то я бы попросил вашего разрешения добавить это код в мою библиотеку ProcLib - там я собрал написанные мной процедуру диагностики и автоматики, и код определения SID мок бы здорово облегчить людям жизнь. ну и понятно, что Вы автоматически становитесь конрибуитором а если будем либу вдвоём развивать и полноправным соавтором.
Автор: kot280379
Дата сообщения: 11.07.2011 23:07
Victor_VG
я не возражаю, и меня есть готовая либа по процессам (метод CreateToolhelp32Snapshot) которая по функционалу перекрывет возможности существующих плагинов для работы с процессами и прекрасно дружит с юникодом. либа по работе с пакетами msi - вытягивает из пакета код продукта и имя, т.е таблицу Property, рекурсивный перебор ключей и значение параметров реестра и удаление ключей по маске и т.д Если интересуют мои наработки - обращайтесь в личку.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

Предыдущая тема: The Bat!


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.