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

» NSIS (Nullsoft Scriptable Install System)

Автор: Victor_VG
Дата сообщения: 26.07.2015 01:04
megane68

Я смотрю на неё проще - ЭВМ это большая железная дура и кофемолка для чисел. Я их разрабатываю и что у них внутри, и на что они способны знаю прекрасно, а потому и не одухотворяю эти железяки без приказа человека не знающие откуда взять А и Б и куда потом положить C=A+B. На деле сами по себе больше чем воздух греть да плюс - минус, умножить - разделить, сдвинуть эти шкафы ничего не умеют, ах да забыл - они ещё умеют гореть с противным запахом, фейерверком и забавными звуками. Усё.
Автор: megane68
Дата сообщения: 26.07.2015 09:51
Victor_VG
Ну так я и говорю, что мы смотрим с разных позиций и у каждого своя правда.
Я кстати тоже не одухотворяю эвм и считаю это невозможным, но как средство управления она уже давно работает.
Автор: Victor_VG
Дата сообщения: 26.07.2015 10:27
megane68

Цитата:
как средство управления она уже давно работает.

Честно выполняя роль ширмы для стоящих за безликой машиной людей.

Ладно, это уже чисто философская лирика и место ей в другом углу Вселенной, а тут это мыслью по древу == офтоп и флуд. Посему в этом направлении дробь!
Автор: megane68
Дата сообщения: 27.07.2015 12:42
Victor_VG
Скажите, вот по примеру MKN с предыдущей страницы сделал страницу с RadioButton, но получил на следующей странице с выбором компонентов две дополнительные группы "1" и "2".
Как сделать, чтобы они не отображались на этой странице?

Добавлено:
О...
Вроде разобрался "-hidden section"
Автор: Victor_VG
Дата сообщения: 27.07.2015 14:11
megane68

Чтобы не видеть секцию в списке выбора компонент достаточно её имя начать с -
Автор: megane68
Дата сообщения: 27.07.2015 14:28
Victor_VG
Ага, уже вычитал.
Сейчас борюсь с двумя вещами:
1.Надо проверить наличие в папке $INSTDIR\work\Tvdata.mdb и если он есть в наличии, то выполнить команду ExecWait "$INSTDIR\tv.exe -close", если его нет, то пропускать эту команду.
2. Надо в секцию включить папку work, но исключить из неё TvData.mdb.

Первый вариант подумалось такой:

Цитата:
StrCmp "$INSTDIR\work\TvDAta.mdb" "$INSTDIR\work\TvData.mdb" Well Unequal
Well:
ExecWait "$INSTDIR\tv.exe -close"
Unequal:


НО что- то не работает.
Автор: Victor_VG
Дата сообщения: 27.07.2015 15:00
megane68

А конструкция StrCmp "$INSTDIR\work\TvDAta.mdb" "$INSTDIR\work\TvData.mdb" Well Unequal и не должна работать ибо StrCmp сравнивает значения строк в переменных или регистрах, но как-то не умеет проверять наличие файла - для сего есть директива ifFileExists <file> <go_to_exists go> <to_not_exists>. Как-то так, даже без учёта того что конструкция в своём написании равноценна Goto Well что и вызывало сбой алгоритма. Вот так нужно:

1)

IfFileExists $INSTDIR\work\Tvdata.mdb +1 +2
ExecWait "$INSTDIR\tv.exe -close"

2)

SetOutPath $INSTDIR\work
File ....
/* ./work/Tvdata.mdb из списка исключаем */
Автор: megane68
Дата сообщения: 27.07.2015 15:35
Victor_VG
Спасибо!
Первый вариант работает!
Во втором варианте, я так понимаю, Вы предлагаете перечислить все файлы в списке, исключая TvData.mdb?
Я собственно так и сделал, но думал, что можно проще - указать папку и исключить из неё нужный файл.
Как тогда включить в секцию пустые папки, которые находятся в папке work, чтобы NSIS на них не выдавал ошибку?
Автор: Victor_VG
Дата сообщения: 27.07.2015 15:43
megane68

Да, а для создания каталогов нужно использовать директиву CreateDirectory:

CreateDirectory <путь к создаваемому каталогу>

Создание (при необходимости рекурсивное) указанного в директиве каталога. При невозможности создания каталога выставляется флаг ошибки .

Можно указать относительный или абсолютный путь к создаваемому каталогу.

ПРИМЕР:

CreateDirectory $INSTDIR\some\directory
Автор: megane68
Дата сообщения: 27.07.2015 15:49
Victor_VG
Меня удивляет то, что если указывается папка work* с параметром /r, то в неё включаются и пустые папки, а если указать пустую, то почему- то нет хотя бы параметра для указания, чтобы NSIS её включил в установщик.
За CreateDirectory спасибо. Придётся значит через неё делать.
Автор: Victor_VG
Дата сообщения: 27.07.2015 16:02
megane68

/r - указывает использовать рекурсию и в данном случае вам лучше использовать классический механизм хотя можно придумать и вариант с использованием File /r, но быть ему громоздким и мне кажется возится с изобретением очередного пути из Калуги в Пензу через Владивосток смысла нет. Лишнее.
Автор: megane68
Дата сообщения: 27.07.2015 16:11
Victor_VG
Понял.
Ещё вопрос, можно ли включить все файлы не имеющие расширения находящиеся в work?
По расширению понятно, а вот если без него? Только с указанием полного названия?
Автор: sevemez
Дата сообщения: 27.07.2015 16:25
I need NSIS video tutorial please help me (for make portable)
Автор: Victor_VG
Дата сообщения: 27.07.2015 16:25
megane68

Так одна из форм директивы File /r /x tvdata.mdb ну и где надо используйте CreateDirectory.
Автор: megane68
Дата сообщения: 27.07.2015 17:30
Victor_VG
ОК! Спасибо!
В общем на сегодня, всё, что задумал получилось. Ещё раз огромный СЭНКС.
Автор: Victor_VG
Дата сообщения: 27.07.2015 18:13
megane68

Лады.
Автор: Sanch8
Дата сообщения: 06.08.2015 15:26
Вышла новая версия NSIS 3.0 Beta 2.

Изменения:
F.1 3.0 Beta 2
Released on August 4th, 2015

F.1.1 Changelog
F.1.1.1 Major Changes

• Preliminary Windows 10 support

F.1.1.2 Minor Changes

• Added !appendfile /RawNL switch
• Added PESubsysVer attribute
• Exec[Wait] sets the CREATE_DEFAULT_ERROR_MODE flag when creating a process
• Fixed 4+ TiB freespace calculation bug (bug #1115)
• Fixed CreateShortcut /NoWorkingDir parsing bug (bug #1110)
• Fixed minor issues in the Pascal NSIS plug-in SDK and removed the extrap global variable
• nsDialogs and InstallOptions now use the system link color

F.1.1.3 Build System

• Linux stdcall warning fix (patch #261)
• Linux test-scripts fix (patch #260)
• Win64 fixes (including patch #258, bug #1105)
• Visual C 2012 fixes
Автор: dodakaedr
Дата сообщения: 28.08.2015 22:04
Как записать 32-bit ключи реестра на 64-bit системе(в SYSWOW64)?
Если указать так:
Код:
!include "x64.nsh"

Function .onInit
${If} ${RunningX64}
SetRegView 64
SetRegView 32
${Else}
SetRegView 32
${EndIf}
FunctionEnd
Автор: Victor_VG
Дата сообщения: 28.08.2015 23:48
dodakaedr

По моему вам и х64 компилятор потребуется. И я с ходу не проверю - у самого х86 до сих пор стоит...
Автор: KloneBADGuY
Дата сообщения: 29.08.2015 10:09
dodakaedr
Цитата:
Как записать 32-bit ключи реестра на 64-bit системе(в SYSWOW64)?...
SysWOW64 - это файлы, а реестр - это Wow6432Node. Пиши как есть,
без SetRegView. Установщик сам пропишет куда следует. SetRegView, используй,
когда потребуется писать в 64-битной ОС в конкретные ветки, типа HKLM\SOFTWARE.
Автор: MKN
Дата сообщения: 29.08.2015 11:10
dodakaedr

Цитата:
Как записать 32-bit ключи реестра на 64-bit системе

Не корректная постановка вопроса.
Если имеется ввиду нахождение ключей в x64 там же, где эти ключи находятся и в x32, то используем SetRegView 64

Проще на примере.

Если в инсталляторе :
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "" ""
то
при запуске этого инсталлятора, в x32 ОС, значения будут в
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]

при запуске этого же инсталлятора в x64 ОС - значения будут в
[HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run]

Если в инсталляторе :
SetRegView 64
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "" ""
то
при запуске в x64 ОС - значения будут в
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
Автор: dodakaedr
Дата сообщения: 29.08.2015 16:23
Спасибо всем! Значить по умолчанию все идет в x32. А команду SetRegView 64 нужно каждый раз писать перед записью или одного раза достаточно?
Автор: Victor_VG
Дата сообщения: 29.08.2015 18:27
dodakaedr

По идее одной на блок до следующего изменения режима записи.
Автор: MKN
Дата сообщения: 29.08.2015 18:49
dodakaedr

Цитата:
А команду SetRegView 64 нужно каждый раз писать перед записью или одного раза достаточно?

Часто и 32 и 64 битные приложения используют в х64 ОС ключи "и там и сям".
Делай так, как надо твоему приложению.
Ну уж если прям-таки все ключи должны находится в х64 также, как и в х32 ОС, то пропиши SetRegView 64 в функции .onInit
Автор: dodakaedr
Дата сообщения: 29.08.2015 19:28
Victor_VG
MKN
Ясно! Спасибо!
Автор: megane68
Дата сообщения: 06.11.2015 03:31
Всех приветствую и здоровья!!!
Подскажите плиз, имею три секции выбора компонентов в субсекции.
Нужно, чтобы при выборе SEC03 или SEC04 секции, как обязаловка включалась секция SEC02.

Цитата:

SubSection /e "Ace Stream technology" SUBSEC01

Section "" SEC02
SetOutPath "$INSTDIR"

SectionIn 1
SectionEnd

Section "" SEC03
SetOutPath "$INSTDIR"

SectionEnd

Section "" SEC04
SetOutPath "$INSTDIR"

SectionEnd
SubSectionEnd
Автор: Victor_VG
Дата сообщения: 06.11.2015 09:03
megane68

Переменная-семафор первично инициализируемая в хидре 0 которая ставится в 1 в нужной секции и по которой срабатывают другие секции через StrCmp. Сам такой приём использую.
Автор: megane68
Дата сообщения: 06.11.2015 09:12
Victor_VG
А можно пример?
Я вот ищу примеры и всё попадается не то, типа выбор из нескольких элементов и т. п., а зависимость как- то не находится. (((
Автор: Victor_VG
Дата сообщения: 06.11.2015 10:09
megane68

В ПМ. Причины простые - если опубликовать, то школяры достанут.
Автор: megane68
Дата сообщения: 06.11.2015 10:27

Цитата:
школяры достанут.

А я ещё не достал? )))
Сейчас гляну, сенкс!!!

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

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


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