PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [73] 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

megane68
11-01-2015, 17:28
С прошедшими и с наступающим Старым НГ!
Подскажите пожалуйста, как прописать в скрипте для NSIS директорию вместе с её содержимым, чтобы не перечислять каждый файл в отдельности?
Сейчас секция в скрипте имеет вид:

Section "AllFonTV" SEC03
SetOutPath "$INSTDIR\luaScr\user\allfontv"
File "..\SimpleTV\AllFonTV\luaScr\user\allfontv\allfonTVDialog.htm"
File "..\SimpleTV\AllFonTV\luaScr\user\allfontv\allfonTVDialog.lua"
File "..\SimpleTV\AllFonTV\luaScr\user\allfontv\allfonTVRefreshPls.lua"
SetOutPath "$INSTDIR\luaScr\user\allfontv\core"
File "..\SimpleTV\AllFonTV\luaScr\user\allfontv\core\allfoncore.lua"
SetOutPath "$INSTDIR\luaScr\user\allfontv"
File "..\SimpleTV\AllFonTV\luaScr\user\allfontv\getaddress.lua"
File "..\SimpleTV\AllFonTV\luaScr\user\allfontv\initconfig.lua"
SetOutPath "$INSTDIR\luaScr\user\startup"
File "..\SimpleTV\AllFonTV\luaScr\user\startup\allfontv.lua"
SectionEnd


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

Begin2Fly
11-01-2015, 17:43
megane68, в шапке есть справочник по NSIS, который люди делали специально во избежание подобных вопросов.
Найдите там "Перевод справки NSIS -> File".

megane68
11-01-2015, 19:47
Цитата Begin2Fly:
"Перевод справки NSIS -> File". »
Спасибо за подсказку. Собственно больше ничего и не нужно. Нашёл ключ /r.

MaGoth
13-01-2015, 19:59
Привет народ.. :)

WimImage plug-in
Цитата:
This plugin is designed to remove the current 2GB limit in NSIS by creating and extracting images contained in .wim files that are separate to the installer.
http://nsis.sourceforge.net/WimImage_plug-in »
Это то что я думаю?!
И как оно, нормально работает?
Если кто ни будь проверял, отпишите плиз, у самого пока нет возможности проверить..

Спасибо.

MKN
17-01-2015, 12:13
И как оно, нормально работает? »
Я не проверял, т.к. смысла в плагинах , для работы с большими объёмами, не вижу... Делай нужный отдельный архив, тем же 7z (Supporting files with sizes up to 16000000000 GB) , и управляй им из скрипта как угодно. Чего ещё надо...

MaGoth
17-01-2015, 16:57
Я не проверял, т.к. смысла в плагинах , для работы с большими объёмами, не вижу... Делай нужный отдельный архив, тем же 7z (Supporting files with sizes up to 16000000000 GB) , и управляй им из скрипта как угодно.»
Не, это дохлый и убогий вариант с никому не нужными окнами распаковки и прочего...
Судя по переписке оно работает корректно:
http://forums.winamp.com/showthread.php?t=377498
Но, только на осях Вин7 и выше, членово.. :(

Есть вариант заюзать оригинальный плагин либы WimImage, но я хз как оно там и что настраивается. И будет ли полезно для Нсис..
http://sourceforge.net/projects/wimlib/


Чего ещё надо...
Хороший вопрос.. :clever-ma

А вообще, хорошего инсталлера надо, с:
- исправлением наконец-то сраного бага "иконки" в Нсис, которая убивается при компиляции чего угодно выше 300 мег;
- реализации его нормальной работы с разными версиями архиваторов, без убогих консольных окон и прочего мелькающего дерьма, по мере установки;
- реализации нормальной и вменяемой системы элементов управления в панели выбора компонентов, вместо кривого не-до чек-бокса;
- реализации нормальной работы с файлами выше 2 ГБ;

От этого уже давно нада (!) :yes:

K.A.V.
17-01-2015, 17:54
- исправлением наконец-то сраного бага "иконки" в Нсис, которая убивается при компиляции чего угодно выше 300 мег; »
Это баг не в NSIS, это проблема ОС, попробуйте создать большой SFX архив в другой программе и увидите

- реализации его нормальной работы с разными версиями архиваторов, без убогих консольных окон и прочего мелькающего дерьма, по мере установки; »
Зависит от ваших знаний и умений работы с NSIS, в чем проблема использовать плагины типа ExecDos для скрытого запуска консольных приложений?
И в чем проблема использовать другие плагины, например NsUnzip для распаковки zip архивов и стороннюю unrar.dll для распаковки rar архивов?

- реализации нормальной и вменяемой системы элементов управления в панели выбора компонентов, вместо кривого не-до чек-бокса; »
Тоже всё реализуется, в этой теме мы уже такое вытворяли...взять хотя бы ту просьбу с 3 деинсталляторами :biggrin:
Тем более, собственные странички никуда не пропали, можно написать свой интерфейс со своими элементами/страничками и сделать его на свой вкус, заменив стандартные диалоги

- реализации нормальной работы с файлами выше 2 ГБ; »
Наверное, единственный минус NSIS, но мне кажется это сомнительным минусом. "Тяжелый" исполняемый файл много плюсов даёт?

MaGoth
17-01-2015, 21:39
Это баг не в NSIS, это проблема ОС, попробуйте создать большой SFX архив в другой программе и увидите »
Эм.. в таком случае почему у Инно или любого другого инсталлера этих проблем нет, даже близко, не зависимо от ОС ?!
Вся проблема в этом дерьме: SFX ?

Зависит от ваших знаний и умений работы с NSIS, в чем проблема использовать плагины типа ExecDos для скрытого запуска консольных приложений?
И в чем проблема использовать другие плагины, например NsUnzip для распаковки zip архивов и стороннюю unrar.dll для распаковки rar архивов? »
Причем тут умения и прочее?
Программный продукт изначально должен быть ориентирован на большее число архиваторов, причем, встроенных на уровне его кода или компонентов. Коли его позиционируют как супер-пупер Инсталлер. А это не так, судя по всему..
Вот именно, что проблема в этих самых сторонних телодвижениях и левых длл, которые отрабатывают в стороне от основного процесса проги, а не в ней самой непосредственно, с соответствующим Гуем для юзера и прочими интерфейсными радостями встроенными непосредственно в требуемые окна установщика..
Это называется "человеческий интерфейс" у проги, которого в Нсис никогда не валялось даже близко..

Тоже всё реализуется, в этой теме мы уже такое вытворяли...взять хотя бы ту просьбу с 3 деинсталляторами
Тем более, собственные странички никуда не пропали, можно написать свой интерфейс со своими элементами/страничками и сделать его на свой вкус, заменив стандартные диалоги »
Про 3 деинсталлятора что-то не припоминаю такого, линк плз, если не затруднит..?
Моя что-то сомневается в этом, или мы друг-друга не поняли ?! Хотелось бы видеть пример нормальной работы разношерстных компонентов, с каким угодно выбором, параметрами взаимоисключения и т.д. и т.п.. Если не трудно. :)

Наверное, единственный минус NSIS, но мне кажется это сомнительным минусом. "Тяжелый" исполняемый файл много плюсов даёт? »
В других инсталлерах ничего тяжелого в этом нет, а пользы на миллионы.. Вот нужда у меня запаковать в нормальный инсталлер свои файлы, а их размер от 4 ГБ и ушел за 10 ГБ и выше..
И что здесь делать можно с этим огрызком ?! :dont-know

K.A.V.
17-01-2015, 22:19
Эм.. в таком случае почему у Инно или любого другого инсталлера этих проблем нет, даже близко, не зависимо от ОС ?!
Вся проблема в этом дерьме: SFX ? »
Не пробовал Inno, может из-за сжатия что-то, может из-за чего ещё, насчет иконки читал где-то, что это проблема в осях, а не в самих файлах, поэтому утверждать 100% не могу, да и не особо хочется это выяснять тестами

Программный продукт изначально должен быть ориентирован на большее число архиваторов, причем, встроенных на уровне его кода или компонентов »
Должен ориентирован на сторонние архиваторы? С чего это он именно должен? У продукта есть встроенный механизм сжатия, причем не один. Всё остальное - ваши хотелки.

Вот именно, что проблема в этих самых сторонних телодвижениях и левых длл »
Вы посмотрите на возможности, которые NSIS предлагает и сколько команд имеет "из коробки", плагины - это уже дополнительные плюшки, которые не всем нужны.

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

Про 3 деинсталлятора что-то не припоминаю такого, линк плз, если не затруднит..?
Моя что-то сомневается в этом, или мы друг-друга не поняли ?! Хотелось бы видеть пример нормальной работы разношерстных компонентов, с каким угодно выбором, параметрами взаимоисключения и т.д. и т.п.. Если не трудно. »
Лень искать и перечитывать всё, воспользуйтесь поиском по теме (по этой и по первой части, не помню, когда это было), в поиске забивайте onSelChange (по выбору компонентов) и Uninstall (по 3 деинсталляторам)
По поводу компонентов я уже говорил, можно создать свою страничку, а можно воспользоваться функцией onSelChange и своей головой, всё для работы с секциями есть в справочнике (описание команд), можете сделать какой угодно функционал, зависит только от вас

В других инсталлерах ничего тяжелого в этом нет, а пользы на миллионы.. »
А как мне видится ситуация: вы пакуете 20 гигов данных (ждёте, пока всё это запакуется), потом тестите свой инсталлер - в одном месте ошибка, делаете ещё раз - ещё ошибка, и ещё, и ещё, тратя своё время на постоянную перепаковку 20 гигов данных.
А как сделал я: я взял и "выкинул" все файлы в 7zip архив рядом с инсталлером, в основной EXE не добавляются никакие файлы, кроме необходимых интерфейсу (оформление, рюшечки всякие и т.д.), в скрипте стоит одна команда на распаковку данных из 20 гигового (заранее подготовленного) 7zip архива. У меня ошибка в коде - правка и через 5 секунд EXE собран, вы же тратите на сжатие 20 гигов прилично времени за место моих 5 секунд.

В любом случае, я не собираюсь никого ни в чем переубеждать, каждый останется при своём мнении, если вы видите преимущество Inno перед NSIS, так в чем проблема, собственно говоря? Тема обсуждения Inno на нашем форуме тоже имеется, изучайте и делайте более гибкие инсталляторы с помощью Inno, а не в NSIS :)

MaGoth
17-01-2015, 23:03
Не пробовал Inno, может из-за сжатия что-то, может из-за чего ещё, насчет иконки читал где-то, что это проблема в осях, а не в самих файлах, поэтому утверждать 100% не могу, да и не особо хочется это выяснять тестами »
Да тут утверждать особо нечего, многие игровые инсталлеры сделаны на нем, и с иконками там никаких проблем, не зависимо от их размеров..

Должен ориентирован на сторонние архиваторы? С чего это он именно должен? У продукта есть встроенный механизм сжатия, причем не один. Всё остальное - ваши хотелки. »
Хотя бы иметь вменяемый механизм для обработки внешних процессов в доп. прогресс баре в окне, с всем сопутствующим ему выводом текста..
Что до сжатий, то это уже давно не его фишка существует и много других архиваторов которые жмут, уже в разы лучше Нсис, что ему и не снилось..

Вы посмотрите на возможности, которые NSIS предлагает и сколько команд имеет "из коробки", плагины - это уже дополнительные плюшки, которые не всем нужны. »
Именно что дополнительные и не всем нужные, а толкового в этой горе мусора, по пальцам двух рук, если пересчитать..


Лень искать и перечитывать всё, воспользуйтесь поиском по теме (по этой и по первой части, не помню, когда это было), в поиске забивайте onSelChange (по выбору компонентов) и Uninstall (по 3 деинсталляторам)
По поводу компонентов я уже говорил, можно создать свою страничку, а можно воспользоваться функцией onSelChange и своей головой, всё для работы с секциями есть в справочнике (описание команд), можете сделать какой угодно функционал, зависит только от вас »
Посмотрим, но мне помниться что без изменения файлов самого Нсис, это все дохлый номер, но даже в этом случае гарантии что будет нормально работать, нет..

А как мне видится ситуация: вы пакуете 20 гигов данных (ждёте, пока всё это запакуется), потом тестите свой инсталлер - в одном месте ошибка, делаете ещё раз - ещё ошибка, и ещё, и ещё, тратя своё время на постоянную перепаковку 20 гигов данных.
Хм, а я так никогда не делаю, я всегда тестирую свой инсталлер на файлах "пустышках", быстро и просто.. ,)

А как сделал я: я взял и "выкинул" все файлы в 7zip архив рядом с инсталлером, в основной EXE не добавляются никакие файлы, кроме необходимых интерфейсу (оформление, рюшечки всякие и т.д.), в скрипте стоит одна команда на распаковку данных из 20 гигового (заранее подготовленного) 7zip архива. У меня ошибка в коде - правка и через 5 секунд EXE собран, вы же тратите на сжатие 20 гигов прилично времени за место моих 5 секунд. »
Это все лишний геморрой с тасканием вагона в прицепухе файлов, обязанных находится рядом с .ехе.. Мне что тупым юзерам также объяснять персонально каждому, что и где должно лежать и как что и зачем запускать вместо 1-го нормального вменяемого файла инсталлятора или образа на его основе ?!

В любом случае, я не собираюсь никого ни в чем переубеждать, каждый останется при своём мнении, если вы видите преимущество Inno перед NSIS, так в чем проблема, собственно говоря? Тема обсуждения Inno на нашем форуме тоже имеется, изучайте и делайте более гибкие инсталляторы с помощью Inno, а не в NSIS »
Ну плюсы у него точно есть, хотя-бы то же пресловутое ограничений по весу, ну и + вагон всяких либ и компонентов..
Что до проблемы, то она в том что мне совсем не хочется соваться в Паскаль. Ну, противен он мне по определению.. + и я хз, как и что там надо будет изменять и сделать, если переносить туда все мое хозяйство и прочие мои хотелки, свистелки и перделки.. :clever-ma

K.A.V.
17-01-2015, 23:45
Хотя бы иметь вменяемый механизм для обработки внешних процессов в доп. прогресс баре в окне, с всем сопутствующим ему выводом текста.. »
А конкретно на примере? Чего не может NSIS в данном вопросе?
Добавить второй прогресс-бар на страничке установки - вроде бы не проблема, управлять его шкалой - вроде бы тоже не проблема. Есть WinAPI функции (не знаю, как в других системах инсталляторов), но с помощью WinAPI сделать можно много чего.

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

MaGoth
17-01-2015, 23:56
А конкретно на примере? Чего не может NSIS в данном вопросе? »
Хм.. дайте подумать, а вот, помните я скидывал вам пдфку для игрового инсталлера, но там тупо по интерфейсу все было расписано?
Что до прогресса и либы, то да, перебор функций апи и гора этого кода в скрипте, при том чтобы все корректно работала доставляют море удовольствия. Не говоря о конкретных зависонах самого инсталла, по окончанию установки и перехода на финальную страничку..
Этот баг так и не смог поймать и искоренить. Возможно специфика Юникода хз..
+ я помнится так где-то месяца три, прикручивал либу конвертера/пакера и андпакера звука, так до конца все и не сделал. Плюнул на это дело, из-за больших возможностей Нсис, а самому писать что-то, ну если бы мог по этой части что толковое то тут бы точно не куковал, временами..


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

Dodakaedr
18-01-2015, 00:23
Подскажите как с помощью rename переместить папку(не пустую) с заменой файлов, папок при необходимости? Так не работает:

Rename $EXEDIR\App\IFX $LOCALAPPDATA
Rename $EXEDIR\App\Set\IFX $APPDATA

K.A.V.
19-01-2015, 17:42
Хм.. дайте подумать, а вот, помните я скидывал вам пдфку для игрового инсталлера, но там тупо по интерфейсу все было расписано? »
Неа, не помню,всё не запомнить...

Что до прогресса и либы, то да, перебор функций апи и гора этого кода в скрипте, при том чтобы все корректно работала доставляют море удовольствия. Не говоря о конкретных зависонах самого инсталла, по окончанию установки и перехода на финальную страничку.. »
Перебор? Вам буквально 1 функция нужна по созданию элемента управления...
Гора кода?
Зависоны?
Ну,в моём примере ничего из вами перечисленного я не заметил :tongue:



; K.A.V. Progress test

var LabelText
var ProgressBar

OutFile "PAGE_INSTFILES_MyProgress_Test.exe"
InstallDir "$TEMP"
!include MUI2.nsh
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_CUSTOMFUNCTION_SHOW MyProgress
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"
ShowInstDetails nevershow




Function MyProgress
FindWindow $R0 "#32770" "" $HWNDPARENT
System::Call 'user32::CreateWindowEx(i0,t"msctls_progress32",t"",i${WS_CHILD}|${WS_VISIBLE},i5,i120,i520,i20,i$R0,i6666,i0,i0) i.R2'

StrCpy $ProgressBar $R2
StrCpy $LabelText "[ Подготовка к началу установки ]"
DetailPrint "Подготовка к началу установки..."

System::Call 'user32::CreateWindowEx(i0,t "Static",t "$LabelText",i${DEFAULT_STYLES},i5,i100,i525,i20,i$R0,i7777,i0,i0) i.R2'
GetDlgItem $LabelText $R0 7777
SendMessage $R0 ${WM_GETFONT} 0 0 $R9
SendMessage $R2 ${WM_SETFONT} $R9 0
FunctionEnd



Section
Sleep 3000
st:
intop $0 $0 + 1
SendMessage $ProgressBar ${PBM_SETPOS} "$0" "0"
SendMessage $LabelText ${WM_SETTEXT} 0 'STR:Прогресс $0%'
DetailPrint "Инфа о деталях установки...А тем временем, у нижнего прогресса $0% :)"
sleep 150
StrCmp $0 "100" 0 st
SendMessage $LabelText ${WM_SETTEXT} 0 'STR:[ Завершено ] $0%'
SectionEnd


Section
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
SectionEnd



Хотелось бы глянуть примерчик »
Я уже писал здесь и не раз, насчет ленивых людей, я вам дал подсказку, по которой вы сможете найти этот пример в этой теме, вы хотите, чтобы я за вас потратил время и перечитывал сообщения? Неее, мне вот, тоже лень :)
Но скажу так, тот пример был сделан конкретно под человека, т.е. там я писал функцию с фиксированным количеством секций для взаимодействия, так что тот пример не универсальное средство для борьбы с глюками взаимоисключающих секций.

Подскажите как с помощью rename переместить папку(не пустую) с заменой файлов, папок при необходимости? Так не работает: »
Перемещение папки возможно только в пределах одного диска, т.е. вы не сможете переместить папку, скажем, с диска C на диск D. Так же, данная функция может не отработать корректно, если файл уже существует в указанной конечной папке. Можете использовать флаг /REBOOTOK, данный флаг поможет переместить файлы после перезагрузки компьютера, если невозможно было переместить некоторые файлы (опять же, не знаю, как функция будет отрабатывать, хотите - проверьте)
Вообще, лучше бы выполнили копирование файлов и затем удаление первой директории...
А вообще, в команде в качестве конечного пути необходимо указывать новое имя папки помимо путя, куда вы собираетесь перемещать папку, например:

Rename "C:\Перемещаемая папка" "C:\Путь 1\Ещё путь\Новое имя перемещаемой папки"

Dodakaedr
20-01-2015, 20:19
Кто-то знаком с плагином ExecDos (http://nsis.sourceforge.net/ExecDos_plug-in#.22exec.22_function)? Как с помощью него перемещать папки с разных дисков?

K.A.V.
20-01-2015, 20:57
Кто-то знаком с плагином ExecDos? Как с помощью него перемещать папки с разных дисков? »
С чего вы взяли, что этот плагин для этого предназначен? Вы хоть пробовали описание в переводчик ввести?
Plug-in works with console applications - creates hidden child process
что означает, данный плагин работает с консольными приложениями, создаёт дочерний процесс с скрытием окна консольного приложения

Dodakaedr
20-01-2015, 21:00
что означает, данный плагин работает с консольными приложениями, создаёт дочерний процесс с скрытием окна консольного приложения »
значить с помощью плагина можно как-то через cmd.exe сделать, а именно через команду move. Вот только как это сообразить?

K.A.V.
20-01-2015, 21:05
значить с помощью плагина можно как-то через cmd.exe сделать, а именно через команду move. Вот только как это сообразить? »
Не ищите лёгких путей? Ну, раз говорите, что "можно", так попробуйте это сделать, примеры команд плагина есть в архиве, посмотрите примеры и попробуйте что-то сообразить с командой move

Dodakaedr
20-01-2015, 23:46
K.A.V., Как указать папку ProgramData?
CopyFiles "$EXEDIR\Data\IFX\*.*" "здесь путь к programdata\IFX"

K.A.V.
21-01-2015, 00:38
K.A.V., Как указать папку ProgramData? »
А что за папка такая ProgramData? Вы же наверное в курсе, куда она ведёт и что в ней за файлы?
C:\Users\All Users = C:\ProgramData

Теперь мы знаем, что это за папка и какая переменная нам нужна (знают сразу те, кто прочел справочник в отличии от вас, видимо)

Затем мы берём и открываем наше чудо под названием Справочник по NSIS (http://forum.oszone.net/thread-168287.html), читаем страничку Переменные NSIS (Variables), прочтя, находим такую строку на страничке:
$APPDATA — папка с данными учётной записи пользователя (c:\Documents and Settings\Ваше имя\Application Data\ или c:\Documents and Settings\All Users\Application Data\). Для неё справедливо замечание SetShellVarContext, равно как и для $DESKTOP.
Соответственно, делаем вывод, что эта та переменная, которая нам нужна, но лишь с той поправкой, что перед её использованием нам необходимо использовать команду SetShellVarContext all, чтобы значение переменной указывало не в профиль пользователя, а в профиль всех пользователей.


SetShellVarContext all
CopyFiles "$EXEDIR\Data\IFX\*.*" "$APPDATA\IFX"
SetShellVarContext current




© OSzone.net 2001-2012