Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
Limonica
04-02-2015, 17:25
Задача: перевести строку с данными в бинарный вид:
Исходная строка:
74DB-AB80-4706
Переводим в HEX:
373444422d414238302d34373036
Нужно чтоб было в таком виде:
37003400440042002D0041004200380030002D003400370030003600
Сложность представляет не перевод в HEX, а именно привести в вид 370034004400 что бы после каждого значения стояли нули. Есть идеи?
Сложность представляет не перевод в HEX, а именно привести в вид 370034004400 что бы после каждого значения стояли нули. Есть идеи? »
эм...если я всё правильно понял, то в чем сама сложность то? Главное логику команд продумать, а с такой задачей легко справится прекрасная команда StrCpy (описание есть в справочнике)
OutFile "test.exe"
Function .onInit
StrCpy $0 "2B3CY6H5R4"
now:
StrCpy $1 "$0" 2 ; Кидаем в $1 первые 2 символа из строки, которую преобразовываем
StrCpy $0 "$0" "" 2 ; Кидаем в $0 эту же строку, но отрезаем первые 2 символа, которые уже мы использовали для преобразования строки
StrCpy $2 "$200$1" ; Кидаем в $2 то, что уже есть + два числа + то, что отрезали от строки (первые 2 символа)
StrCmp $0 "" 0 now ; когда исходная строка после урезания останется пустой - тогда и закончим :)
StrCpy $2 "$2" "" 2 ; После завершения преобразования отрезаем первые два нуля в начале строки
StrCpy $2 "$200" ; После завершения преобразования добавляем последние два нуля в конец строки
MessageBox MB_OK|MB_ICONINFORMATION "$2$\n$\nГотово!"
quit
FunctionEnd
Section
SectionEnd
Прив,
Хм.. при компиляции словил такую ошибку:
Internal compiler error #12345: error mapping file (1614438004, 33554432) is out of range.
Note: you may have one or two (large) stale temporary file(s)
left in your temporary directory (Generally this only happens on Windows 9x).
Кто нить сталкивался с подобным, и как от нее избавится есть какие идеи ?!
MaGoth, суммарный размер файлов проекта, которые упаковываются, не больше 2 Гб?
MaGoth, суммарный размер файлов проекта, которые упаковываются, не больше 2 Гб? »
Эмм.. файлы:
1-й - 89,7 МБ (94*059*011 байт)
2-й - 65,7 МБ (68*893*188 байт)
3-й - 36,3 МБ (38*131*349 байт)
4-й - 448 МБ (470*307*669 байт)
+ две папки:
1,51 ГБ (1*629*940*362 байт)
406 МБ (426*590*980 байт)
Т.е. если больше 2-х размером, то пожать он их уже не сможет ?!
Это пипец какой-то, а не инсталлер, в архиве все это дело меньше 2х будет и жмется нормально, а тут даже толковый инсталлятор хрен соберешь..
Мда, придется перебираться на Инно.. :(
Т.е. если больше 2-х размером, то пожать он их уже не сможет ?! »
Нет, не сможет
Это пипец какой-то, а не инсталлер, в архиве все это дело меньше 2х будет и жмется нормально, а тут даже толковый инсталлятор хрен соберешь.. »
Ну, можете пойти не очень красивым путём и сначала упаковать файлы в архив, потом закинуть в тело инсталера, либо создать отдельный файл архива, лежащий рядом с инсталером
либо создать отдельный файл архива, лежащий рядом с инсталером »
Самое разумное и правильное решение. Практически все огромные инсталляторы так устроены. Маленький Setup.exe и рядом архив(ы). Тот же знаменитый ISS так делает.
(тут вроде как было беспокойство, что будет мелькать окно консоли при распаковке - так нужно сделать это окно скрытым)
Самое разумное и правильное решение. Практически все огромные инсталляторы так устроены. Маленький Setup.exe и рядом архив(ы). Тот же знаменитый ISS так делает. »
Хм.. а примерчика случаем рабочего нет, глянуть как оно там?
Хм.. а примерчика случаем рабочего нет, глянуть как оно там? »
А что там в примерчике такого сложного то вы хотите увидеть? Достаточно подготовить архив и прописать команду на распаковку с плагином ExecDos, при этом посмотрев параметры 7-Zip, которые вы будете ему передавать
Но, конечно же, проще попросить уже готовый пример, тебе помогут всё это за тебя кто-то сделает
Распаковка файлов будет производиться на рабочий стол пользователя, после распаковки будет открыта папка
В данном примере я показываю, как можно распаковать не просто полностью весь архив в папку, а как можно распаковать разные папки из архива в разные директории
Такой метод я использую в своём SFX Creator, только там код навороченнее :blush2:
Kopejkin
07-02-2015, 00:42
Чем отличается ярлык на рабочем столе, создаваемый NSIS
SetShellVarContext current # (или all)
CreateShortCut "$DESKTOP\FolderSizes 7.lnk" "$INSTDIR\FolderSizes.exe" "" "$INSTDIR\FolderSizes.exe" "" "" "" "Запустить ${PRODUCT_NAME}${PRODUCT_VERSION}"
и ярлык, создаваемый вручную из контекстного меню файла: Отправить - Рабочий стол (создать ярлык)?
Спрашиваю потому, что эти ярлыки по разному открывают программу. Обратите внимание, что в первом случае в окне Введения не отображаются картинки, во втором - отображаются. Мне нужно, чтобы отображались.
http://savepic.su/4929411.gif
http://savepic.su/4936579.gif
Можно ли в NSIS создавать ярлыки, которые будут запускать программы с правами администратора? Чтобы при открытии свойств ярлыка, в окне дополнительных свойств было так:
http://savepic.su/4959106.png
Чем отличается ярлык на рабочем столе, создаваемый NSIS »
и ярлык, создаваемый вручную из контекстного меню файла: Отправить - Рабочий стол (создать ярлык)? »
КЭП. Зайти в свойства двух ярлыков и посмотреть различия :)
У "правильного" ярлыка прописана рабочая директория, а у вас при создании ярлыка там пустое значение, из-за этого в программе получается указанный вами глюк.
Решение.
Прописать SetOutPath перед командой создания ярлыка:
SetOutPath $INSTDIR
CreateShortCut "$DESKTOP\FolderSizes 7.lnk" "$INSTDIR\FolderSizes.exe" "" "$INSTDIR\FolderSizes.exe" "" "" "" "Запустить ${PRODUCT_NAME}${PRODUCT_VERSION}"
Kopejkin
08-02-2015, 19:23
...и посмотреть различия
...рабочая директория...там пустое значение...
Решение. Прописать SetOutPath...»
Да нет, не пустое, но... другое:
http://savepic.su/4928221.png http://savepic.su/4979420.png
"Увидел" разницу только после того, как сделал скриншоты окон свойств.
А вот за решение спасибо. Я когда распихивал ярлыки по отдельным секциям, совершенно упустил этот момент :lamer:
Может есть решение и второй части вопроса (про ярлык с админскими привилегиями) ?
Да нет, не пустое, но... другое: »
В поле "Рабочая директория", как вы думаю, догадались, ставится та директория, которая была использована в последний раз в команде SetOutPath
Просто на моём голом скрипте она оказалась пустой :)
Может есть решение и второй части вопроса (про ярлык с админскими привилегиями) ? »
А второй вопрос вы "запихнули" между картинками про первый вопрос для особо внимательных? :up
Даже не смотрел на текст, что между картинками :biggrin:
Решение есть и завтра я его предоставлю в виде готового макроса (чтобы всем вам было удобно, вставив всего одну команду кода), сегодня уже поздно и мне пора спать)
Возвращаясь к вопросу о галочке "Запуск от имени администратора" в свойствах ярлыка.
Решил сразу написать небольшой include, может, кому пригодится...
Как подключать include файл, я думаю, все уже знают и умеют это делать?
1. Распаковываем файл из архива в папку, где лежит ваш NSIS-скрипт
2. В начале вашего NSIS-скрипта прописываем:
!include "adminShortCut.nsh"
После подключения include-файла вы можете использовать 2 команды:
Ставим отметку на чекбокс "Запуск от имени администратора"
${aSC::SetON} "полный путь к ярлыку.lnk"
Снимаем отметку с чекбокса "Запуск от имени администратора"
${aSC::SetOFF} "полный путь к ярлыку.lnk"
Пример команды
${aSC::SetON} "$DESKTOP\Мой ярлык.lnk"
А что там в примерчике такого сложного то вы хотите увидеть? Достаточно подготовить архив и прописать команду на распаковку с плагином ExecDos, при этом посмотрев параметры 7-Zip, которые вы будете ему передавать
Но, конечно же, проще попросить уже готовый пример, тебе помогут всё это за тебя кто-то сделает
Распаковка файлов будет производиться на рабочий стол пользователя, после распаковки будет открыта папка
В данном примере я показываю, как можно распаковать не просто полностью весь архив в папку, а как можно распаковать разные папки из архива в разные директории
Такой метод я использую в своём SFX Creator, только там код навороченнее »
Посмотрел ваш пример, для меня не сгодился, все тексты кракозябрами и криво работает, по-крайней мере на моей версии.
Пока ковырял эту тему, перетестил разные плагины и прочее по архивам., и нашел для себя нужное решение. Хоть и не идеальное, но зато теперь свой образ ISO с любым количеством файлов можно сделать и инсталлер с ними со всеми работает..
Вообщем, все зер гут, продолжаю сидеть на NSIS-ке.. :ok:
Посмотрел ваш пример, для меня не сгодился, все тексты кракозябрами »
Ещё одно подтверждение того, что вам нужен далеко не пример (вы просили - я предоставил), а вам нужен конечный готовый код
Я же вам не зря писал, например, про
при этом посмотрев параметры 7-Zip »
вам даже это лень было сделать, это ведь очевидно
Если бы вы открыли справку 7-ZIP и посмотрели бы команды+ключи, то увидили бы такой полезный ключ как -scc и после подстановки его в мой пример, то...
ExecDos::exec /NOUNLOAD /ASYNC /DETAILED '$PLUGINSDIR\7za.exe x "$EXEDIR\data.7z" -o"$2" "$1" -aoa -y -sccWIN' "" $0
И, если бы вы хотя бы попробовали поработать с плагином ExecDos (опять же, почитав его описание и посмотрев готовые примеры в архиве с плагином), то могли бы реализовать и такое, чтобы никакая информация не отображалась в детали установки из консоли приложения, кроме файлов, которые распаковываются...
и криво работает »
Моё дело предложить, у меня прекрасно всё работает, я вам всего-лишь подкинул идею реализации с консольным приложением
Ну, раз у вас получилось реализовать другим методом, то могли бы поделиться, может, кто-нибудь и воспользуется вашим методом...
K.A.V.
Ещё одно подтверждение того, что вам нужен далеко не пример (вы просили - я предоставил), а вам нужен конечный готовый код »
Ну, скажем так я и сам могу сделать то, что мне требуется, просто иногда хочется видеть готовый пример(с нормально описанными комментами) уже кем-то реализованный, чем греть голову самому и тратить свободное время на очередной "лисапед на квадратных колесах"..
Моё дело предложить, у меня прекрасно всё работает, я вам всего-лишь подкинул идею реализации с консольным приложением »
Полагаю что проблема в моей версии Юникодного Нсис, а не в вашем примере.. У меня он немного расшаренный..
Ну, раз у вас получилось реализовать другим методом, то могли бы поделиться, может, кто-нибудь и воспользуется вашим методом... »
Как сделаю все что надо мне, оттестирую, то потом скину вариант реализации если это кому-то будет нужно..
ЗЫ, Еще один момент, можете подсказать справку или что нибудь подобное применительно работы с архивами в Нсис, из вашего примера не совсем понял, как например распаковывать содержимое отдельно взятого вложенного каталога, из кучи каталогов в архиве, ибо комментов нема.. :clever-ma
можете подсказать справку или что нибудь подобное применительно работы с архивами в Нсис »
Даже и не знаю, как ответить на этот вопрос...
Всё, что я видел по NSIS - оригинальная справка, с которой началось моё изучение NSIS, мне хватает того, что у меня в голове, так что по NSIS информацию не искал и не знаю, что есть помимо плагинов (http://nsis.sourceforge.net/Category:Plugins), примеров на оф. сайте (http://nsis.sourceforge.net/Category:Code_Examples) и того, что в шапке этой темы.
Если есть конкретные вопросы - задавайте, постараемся помочь по мере текущих наших знаний в NSIS
Если брать работу с архивами, ну, что здесь можно сказать? Всё идёт к одному - к работе с консольной версией конкретного архиватора (параметры/ключи, но это можно и самому посмотреть в справке ахиватора), либо к работе с его dll, с помощью которых можно производить распаковку архива, но копаться в этом лично у меня нет желания.
Есть, опять же, плагины для NSIS, для распаковки архивов
http://nsis.sourceforge.net/Nsisunz_plug-in
http://nsis.sourceforge.net/NsUnzip_plugin
http://nsis.sourceforge.net/UnTGZ_plug-in
http://nsis.sourceforge.net/Nsis7z_plug-in
был тут ещё разговор про RAR dll для NSIS (http://forum.oszone.net/post-2312165.html#post2312165), не знаю, работает ли эта dll для новых архивов, лень проверять
из вашего примера не совсем понял, как например распаковывать содержимое отдельно взятого вложенного каталога, из кучи каталогов в архиве »
Ну там же всё просто, какие там комменты то... :o
Section "1"
DetailPrint "Распаковка папки 1..."
Push "Папка 1"
Push "$INSTDIR"
call _7ZipExtractFileFunc
SectionEnd
Push "Папка 1" - указывает, какую директорию распаковать из архива
Push "$INSTDIR" - указывает, в какую директорию распаковать
Эти команды передают функции _7ZipExtractFileFunc наши папки
Function _7ZipExtractFileFunc
pop $2
pop $1
CreateDirectory "$2"
ExecDos::exec /NOUNLOAD /ASYNC /DETAILED '$PLUGINSDIR\7za.exe x "$EXEDIR\data.7z" -o"$2" "$1" -aoa -y -sccWIN' "" $0
Pop $0
ExecDos::wait $0
FunctionEnd
Команды pop принимают передаваемые параметры и используют эти параметры в командной строке архиватора
$1 - директория, которая распаковывается
$2 - директория, куда распаковываются файлы
Распаковать можно с полными путями только папку, которая лежит в корне архива, нельзя распаковать (вроде бы :)) вложенную подпапку в какой-либо папке с сохранением всей структуры каталогов
K.A.V.
Распаковать можно с полными путями только папку, которая лежит в корне архива, нельзя распаковать (вроде бы ) вложенную подпапку в какой-либо папке с сохранением всей структуры каталогов »
Вот конкретно распаковка вложенных каталогов и интересовала в этом вопросе. Спасибо.
Будем копать дальше..
Зы, кстати, а где можно стянуть RAR dll для NSIS, что-то ссылок не нашел, а та что есть не робит.. ?! :dont-know
Вот конкретно распаковка вложенных каталогов и интересовала в этом вопросе. Спасибо. »
Консольный WinRAR вроде такого тоже не умеет, либо просто я не вкуриваю, как там ключи правильно использовать :blush:
Зы, кстати, а где можно стянуть RAR dll для NSIS, что-то ссылок не нашел »
С ней нужно тягать ещё unrar.dll свежей версии, чтобы поддерживалась распаковка современных RAR5 архивов, в архиве обновил до версии 5.20, вроде распаковка работает
Не забудьте, что nsisUnRar2 будет работать только при использовании граф. интерфейса (при исполнении из секции), может, запустите и из под .onInit, копайтесь, если хотите, мне разбираться не особо интересно в этой теме :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC