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

» NSIS (Nullsoft Scriptable Install System)

Автор: megane68
Дата сообщения: 18.01.2015 23:21
Sanch8
Ага, спасибо!
Бегло пробежался, там как раз нет того, что мне было нужно, ибо используется одна секция, после установки все регистрационные данные удаляются.
У меня две секции установки файлов и в зависимости от выбора RadioButton, должна устанавливаться первая или вторая секции.
Можно конечно по этому примеру, сделать одну группу и удалить лишние файлы после распаковки, но вроде как не кошерно.
У меня как раз вся сложность в том, чтобы радиокнопки ассоциировались каждая со своей секцией.
В общем сегодня днем или вечером ознакомлюсь подробнее с этим примером.
Ещё раз спасибо!
Автор: Victor_VG
Дата сообщения: 19.01.2015 01:45
dodakaedr

Тут проще через ExecDos "move ..." всё сделать, а NSIS команда и в более простых случаях у меня не всегда срабатывала.
Автор: dodakaedr
Дата сообщения: 19.01.2015 12:10
Victor_VG
Приведите пожалуйста пример
Автор: Victor_VG
Дата сообщения: 19.01.2015 15:06
dodakaedr

Давайте используем такой вызов:

ExecDos:exec /DISABLEFSR 'md "$LOCALAPPDATA\App\IFX"&&move /y $EXEDIR\App\IFX $LOCALAPPDATA\\App\IFX'

в который согласно описанию плагина ExecDos и команды [more=move]Перемещение файлов и переименование файлов и папок

Перемещение одного или более файлов:

MOVE [/Y | /-Y] [диск:][путь]имя_файла1[,...] назначение

Переименование папки:

MOVE [/Y | /-Y] [диск:][путь]имя_папки новое_имя_папки

[диск:][путь]имя_файла1 Определяет местоположение файла или файлов, которые
необходимо переместить.
Назначение Определяет новое местоположение файла. Назначение
может состоять из буквы диска (с последующим
двоеточием), имени папки или их комбинации. При
перемещении только одного файла, можно указать и его
новое имя, если хотите выполнить его одновременное
переименование при перемещении.
[диск:][путь]имя_папки Определяет папку, которую необходимо переименовать.
новое_имя_папки Определяет новое имя папки.

/Y Перезаписывать существующие файлы назначения без
предупреждения.
/-Y Предупреждать при перезаписи существующего файла
назначения.

Ключ /Y может присутствовать в значении переменной среды окружения COPYCMD.
Оно может перекрываться ключом /-Y в командной строке. По умолчанию
используется предупреждение о перезаписи, если только команда MOVE не
выполняется как часть пакетного файла.[/more] будут перемещены файлы, а до этого команда md создаст нужный нам каталог-приёмник. Чтобы md (mkdir) создала рекурсивную структуру каталогов таргет надо указать в кавычках или она сообщит об ошибке.
Автор: dodakaedr
Дата сообщения: 20.01.2015 15:27
Victor_VG
Я использую NIS Edit. Плагин не видит. Как его установить?

Добавлено:
Все понял. У вас пример не корректен...
Автор: Victor_VG
Дата сообщения: 20.01.2015 15:37
dodakaedr

Просто скопировать в подкаталог ./Plugins/ компилятора и при сборке бинарника он сам его подхватит. NIS Edit и не должен вызывать NSIS плагины ибо у него свои используются.
Автор: dodakaedr
Дата сообщения: 20.01.2015 15:38
Но все равно не перемещает...
Автор: Victor_VG
Дата сообщения: 20.01.2015 15:59
dodakaedr

Вы про переменные среды или UNIX нотацию? Я же не под форточками живу, а в демоне. Отсюда и привычная запись.
Автор: dodakaedr
Дата сообщения: 20.01.2015 20:03

Цитата:
Отсюда и привычная запись.

а как правильно написать?
Автор: Victor_VG
Дата сообщения: 20.01.2015 20:32
dodakaedr

Для CMD переменные среды указываются в %ENVERONENAME%, но в данном случае имеет место опечатка - двойной \\:

ExecDos:exec /DISABLEFSR 'md "$LOCALAPPDATA\App\IFX"&&move /y $EXEDIR\App\IFX $LOCALAPPDATA\\App\IFX'


убираем, видим:

ExecDos:exec /DISABLEFSR 'md "$LOCALAPPDATA\App\IFX"&&move /y $EXEDIR\App\IFX $LOCALAPPDATA\App\IFX'

а конструкции вида команда1&команда2& ... &командаN или команда1&&команда2&& ... &&командаN допустимы спецификациями ОС и носят название "конвейер команд". Разница в них одна:

одиночный & - после завершения текущей команды выполнить следующую не проверяя успешность её выполнения;

двойной && - выполнить следующую команду при успешном выполнении текущей, иначе прервать выполнение последовательности команд.

Вы можете использовать данный приём в плагинах NSIS предусматривающих выполнение команд CMD или пакетных (.bat/.btm/.cmd) файлах сценариев ОС. Файлы .btm выполняются только командными процессорами JP Software 4NT/TCC/TCMD и имеют расширенный формат похожий на формат UNIX оболочки bash. Условие выдвигаемое NSIS простое - если какая-то команда взята в кавычки, то внешние кавычки должны быть другого вида - либо `` либо ' ' чтобы компилятор мог их правильно различить. Сам подобные приёмы использую.
Автор: dodakaedr
Дата сообщения: 20.01.2015 21:21
Victor_VG
Опять же что-то не понятное... Объясните свой пример, что к чему? С описания ясно что плагин для вызова консольных программ в скрытном режиме, где это в примере?

ExecDos::exec /DISABLEFSR 'md "$LOCALAPPDATA\App\IFX"&&move /y $EXEDIR\App\IFX $LOCALAPPDATA\App\IFX'

ExecDos:: - вызов плагина (с одной : не работает(ошибка));
exec - функция плагина;
/DISABLEFSR - откл. переключения на 64-bit систему(наверное не уверен);
md - ?;
"$LOCALAPPDATA\App\IFX" - ? (для чего?);
&&move /y - это понятно;
$EXEDIR\App\IFX - как бы от куда(правильно?);
$LOCALAPPDATA\App\IFX - как бы куда(правильно?);

Добавлено:
И вообще плагин подходит для работы на Windows 7?
Автор: Victor_VG
Дата сообщения: 20.01.2015 23:22
dodakaedr

Вам мелькание окна нужно? Думаю что нет, плагин его уберёт, синтаксис дан в описании плагина, /DISABLEFSR запретим редиректор на х64 системах иначе он мешает, остальное просто и понятно - move не создаст каталог, значит это сделает команда md (mkdir), переменные среды раскроет сам NSIS, с остальным верно. На Win7 это работает, даже под вайном срабатывает, а там эмуляция винды идёт.
Автор: megane68
Дата сообщения: 15.03.2015 01:24
Victor_VG
Приветствую Вас. Давненько я не появлялся.
Подскажите плиз, а можно ли на стандартной странице завершения установки, добавить чекбокс для установки ярлыка?
А то ярлык у меня или есть по умолчанию, либо его нет, а функции вкл/откл ярлыка для стандартных страниц я в хелпе не нашёл.
Автор: Victor_VG
Дата сообщения: 15.03.2015 04:32
megane68

Там нет, но можно это сделать через выборочную установку как компоненту - в HM NIS создаём заготовку с выбором компонент, ставим семафор и добавляем выборочную секцию при выборе которой он взводится, а далее используем его в условии ветвления для обхода установки ярлыка.
Автор: megane68
Дата сообщения: 15.03.2015 09:40
Victor_VG
HM NIS создал мне секцию, но если её подставить в мой сценарий, то NSIS спотыкается на !insermarco MUI...

Цитата:
Section -AdditionalIcons
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd

Автор: Victor_VG
Дата сообщения: 15.03.2015 15:32
megane68

Правильно, т.к. после секции post нужен макрос вида:

Цитата:
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "component description"
...
!insertmacro MUI_FUNCTION_DESCRIPTION_END

для каждой выбираемой секции. иначе никак. И примерно такой код:

Цитата:
var $sem1

Function .onInit
StrCpy $sem1 0
FunctionEnd

Section "Desktop" sec04
StrCpy $sem1 1
SectionEnd

Section -main
CreateShortCut "$SMPROGRAMS\<mygroup>\<myprogram>.lnk" "$INSTDIR\<myprogram>..exe"
а остальное что мастер сгенерил ибо он только заготовку нам предоставляет, а всё прочее уже мы руками пишем....
StrCmp $sem1 0 +2
CreateShortCut "$DESKTOP\<myprogram>.>.lnk" "$INSTDIR\<myprogram>..exe"
SectionEnd

Section -Post

SetAutoClose true
SectionEnd

!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
...
!insertmacro MUI_DESCRIPTION_TEXT ${sec04} "Create Desktop shortcut"
!insertmacro MUI_FUNCTION_DESCRIPTION_END


Автор: megane68
Дата сообщения: 15.03.2015 15:57
Victor_VG
Теперь ругается на:

Цитата:
Function: ".onInit"
Error: Function named ".onInit" already exists.

потому, что раньше есть

Цитата:
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd

И у Вас очепятка в переменной var $sec1, а надо var sec1
Автор: Victor_VG
Дата сообщения: 15.03.2015 16:07
megane68

Ну, лишнее убрать и усё.
Автор: megane68
Дата сообщения: 15.03.2015 16:09
Victor_VG
Честно говоря я думал, что можно чекбокс сделать под полем выбора компонентов, а у нас получился просто ещё один компонент.
Ну хоть так. Хотя и хочется его отдельным чекбоксом выделить.
Идеально было бы на странице завершения установки сделать, там где чекбокс запуска программы.
Автор: Victor_VG
Дата сообщения: 15.03.2015 16:10
megane68

Выбор проще - меньше возни и головной боли.
Автор: megane68
Дата сообщения: 15.03.2015 16:13

Цитата:
Выбор проще - меньше возни и головной боли.

Это да... Я ещё в январе начал делать свою страницу выбора типа установки Standart & Portable с двумя радиобатонами, но до сих пор так и не доделал.

Добавлено:
Victor_VG
А вот у меня вопрос, а можно где- то посмотреть сценарии стандартных страниц мастера установки?
Автор: Victor_VG
Дата сообщения: 15.03.2015 18:00
megane68

В MUI и стандартном UI NSIS- они идут в его дистрибутиве.
Автор: Purple Elf
Дата сообщения: 20.03.2015 10:05
Добрый день

Есть следующий вопрос (наверное глупый). А есть ли к NSIS Wizard какой-нибудь (ну типа как в Inno Setup)?
Автор: Victor_VG
Дата сообщения: 20.03.2015 10:38
Purple Elf

HM NIS, среда Eclips - к ней есть специальный модуль, IDM UEStudio. Первый самый простой, но древний, хотя в большинстве случаев его хватает.
Автор: MaGoth
Дата сообщения: 25.03.2015 05:04
megane68

Цитата:
Изучаю потихоньку, но мне как профану сложновато вычленить, что- то нужное из сего чтива. Видимо пока не добрался до этого места.
Со сценарием в ANSI проблема, если пользуешься HM NIS Edit. Я уже выше присал, что у меня названия логотипов есть с португальскими и прочими прибамбасами, например буква А с умляутом над буквой. И таких примеров много. HM NIS такой сценарий преобразовывает в ANSI и получается буква А без умляута. Когда сценарий уже готов, вычислить такой файл можно только по ошибкам при компиляции. И вот сидишь и пятьдесят названий после каждой ошибки компиляции правишь.
Занятие я бы сказал не для слабонервных. )))
...

Victor_VG
Проблемы с кодировками неизлечимы до тех пор, пока все разработчики осей и софта не соберутся вместе и не придут к единому решению. До тех пор либо будут крякозябры в отдельных  продуктах, либо оси будут глючить от твиков и костылей.
Поэтому я изначально хочу побороть этот вопрос. На корню так сказать.

Для нац., алфавитов и их символов вам нужно использовать версию NSIS UNICODE, все остальное будет выводить разношерстные тексты в виде кракозябр..


Цитата:
Теперь надеюсь могу не обращать внимание на кодировку сценария. Просто после редактирования конвертирую его в юникод и порядок - не надо править названия файлов.

Юникодная версия сама все форматит перед компиляцией в надлежащий ей вид, если код в Анси..
Но, стоит помнить что для сложных скриптов с использование всяких функций длл/апи и прочего, потребуются изменения в названиях функций и т.д. и т.п..


Цитата:
С договорённостью вы правы, но и человеческий фактор не надо скидывать со счетов. Я не раз встречал переводы сделанные с кодировкой ресурсов в ANSI (для Win9x/ME) и с костылями в виде правки большинства кодовых страниц ОС на СР-1251 которые прикручивали к UNICODE ОС платформы WINNT под предлогом "Всё работает! Просто поставьте этот твик реестра и кракозябров не будет!" вместо перевода ресурсов в UNICODE - налицо откровенная лень горе-переводчика и вся ОС стоит на ушах.

Зачем что-то и где-то править если все давно сделано?!
Автор: Victor_VG
Дата сообщения: 25.03.2015 10:45
MaGoth

Есть особенности ОС. Например файловая система NTFS внутри работает с именами в UTF-16 LE, но позволяет ОС писать имена файлов и однобайтных кодировках, а после иди разбирайся что там записано. Сам не раз с этим встречался когда получал имена объектов с ФС в OEM или ANSI, особенно после их записи локализованными программами. Если мы их читаем в той же копии ОС то они обычно читаемы, а коли их считывать к примеру через UNIX драйвер ntfs-3g, будет и чтение и запись, но проблемы с кодировками гарантированы. Приходится ставить локалью системы UTF-8 и тогда кракозябров не будет.
Автор: korosya
Дата сообщения: 10.04.2015 00:32
Прошу помощи.
В скрипте для конструктора AkelPad я использую для запуска утилит команду вида:

Код: ExecWait 'hidcon.exe takeown.exe /F "$R8"'
Автор: Victor_VG
Дата сообщения: 10.04.2015 04:25
korosya

Нагородили огород с ExecWait `hidecon ......` всем прочим добром. Хоть святых выноси. Используйте вместо nsExec::Exec плагин ExecDos::exec, и далее по тексту конструкций вида "$R9" быть не должно - передадите своему коду мусор на стеке, хватит. Ну а то что первый автор "скрипта" явно старался скрыть свои мысли видно по стилю его кода - он явно сам не понял что хочет получить, в итоге написал монстра...
Автор: korosya
Дата сообщения: 10.04.2015 18:19

Цитата:
передадите своему коду мусор на стеке, хватит. Ну а то что первый автор "скрипта" явно старался скрыть свои мысли видно по стилю его кода - он явно сам не понял что хочет получить, в итоге написал монстра...

У меня стоит задача: Найти в папке %WINDIR%\WINSxS\ все файлы notepad.exe и, если размер найденного файла равен размеру %WINDIR%\notepad.exe, то добавить к переменной $Path2 путь к такому файлу. Также надо "совершить" takeown.exe и icacls.exe над этими файлами и папками, в кот. они находятся. Подскажите, плиз, как оптимальнее выполнить данные действия?
Автор: Victor_VG
Дата сообщения: 10.04.2015 20:12
korosya

Первая часть задачи решается проще - создаются хардлинки с которыми NTFS умеет работать с момента своего создания для Windows NT 3.1, к примеру утилитой ln. Это позволит избежать ошибки "Имя и размеры совпадают, содержимое отличается". Вторая задача полностью решается редактированием ACL для чего имеются инструменты такие как AccessControl plug-in, но для Notepad++ это не нужно ибо он сам умеет наломать дров будь здоров, а так вы в лучшем случае потеряете только свои данные, а в худшем сотворите пакость для тысяч пользователей, и не все они будут к вам столь добры чтобы просто обложить в семь этажей и сесть восстанавливать порушенное и всегда в жизни найдётся кто-то кто с удовольствием лично займется претворением своих проклятий в адрес "злодея", да вот беда - невинные люди могут при этом пострадать, а это не допустимо, и у иных из таких мстителей тормозов нет.

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

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

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


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