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

Limonica
04-02-2015, 17:25
Задача: перевести строку с данными в бинарный вид:

Исходная строка:
74DB-AB80-4706

Переводим в HEX:
373444422d414238302d34373036

Нужно чтоб было в таком виде:
37003400440042002D0041004200380030002D003400370030003600

Сложность представляет не перевод в HEX, а именно привести в вид 370034004400 что бы после каждого значения стояли нули. Есть идеи?

K.A.V.
04-02-2015, 19:15
Сложность представляет не перевод в 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

MaGoth
06-02-2015, 12:52
Прив,

Хм.. при компиляции словил такую ошибку:
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).

Кто нить сталкивался с подобным, и как от нее избавится есть какие идеи ?!

K.A.V.
06-02-2015, 13:00
MaGoth, суммарный размер файлов проекта, которые упаковываются, не больше 2 Гб?

MaGoth
06-02-2015, 13:21
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х будет и жмется нормально, а тут даже толковый инсталлятор хрен соберешь..
Мда, придется перебираться на Инно.. :(

K.A.V.
06-02-2015, 13:31
Т.е. если больше 2-х размером, то пожать он их уже не сможет ?! »
Нет, не сможет

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

MKN
06-02-2015, 15:39
либо создать отдельный файл архива, лежащий рядом с инсталером »
Самое разумное и правильное решение. Практически все огромные инсталляторы так устроены. Маленький Setup.exe и рядом архив(ы). Тот же знаменитый ISS так делает.
(тут вроде как было беспокойство, что будет мелькать окно консоли при распаковке - так нужно сделать это окно скрытым)

MaGoth
06-02-2015, 15:50
Самое разумное и правильное решение. Практически все огромные инсталляторы так устроены. Маленький Setup.exe и рядом архив(ы). Тот же знаменитый ISS так делает. »
Хм.. а примерчика случаем рабочего нет, глянуть как оно там?

K.A.V.
06-02-2015, 17:00
Хм.. а примерчика случаем рабочего нет, глянуть как оно там? »
А что там в примерчике такого сложного то вы хотите увидеть? Достаточно подготовить архив и прописать команду на распаковку с плагином 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

K.A.V.
07-02-2015, 10:14
Чем отличается ярлык на рабочем столе, создаваемый 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:

Может есть решение и второй части вопроса (про ярлык с админскими привилегиями) ?

K.A.V.
08-02-2015, 21:23
Да нет, не пустое, но... другое: »
В поле "Рабочая директория", как вы думаю, догадались, ставится та директория, которая была использована в последний раз в команде SetOutPath
Просто на моём голом скрипте она оказалась пустой :)

Может есть решение и второй части вопроса (про ярлык с админскими привилегиями) ? »
А второй вопрос вы "запихнули" между картинками про первый вопрос для особо внимательных? :up
Даже не смотрел на текст, что между картинками :biggrin:

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

K.A.V.
09-02-2015, 12:51
Возвращаясь к вопросу о галочке "Запуск от имени администратора" в свойствах ярлыка.
Решил сразу написать небольшой include, может, кому пригодится...

Как подключать include файл, я думаю, все уже знают и умеют это делать?

1. Распаковываем файл из архива в папку, где лежит ваш NSIS-скрипт
2. В начале вашего NSIS-скрипта прописываем:

!include "adminShortCut.nsh"



После подключения include-файла вы можете использовать 2 команды:
Ставим отметку на чекбокс "Запуск от имени администратора"
${aSC::SetON} "полный путь к ярлыку.lnk"


Снимаем отметку с чекбокса "Запуск от имени администратора"
${aSC::SetOFF} "полный путь к ярлыку.lnk"

Пример команды
${aSC::SetON} "$DESKTOP\Мой ярлык.lnk"

MaGoth
09-02-2015, 15:23
А что там в примерчике такого сложного то вы хотите увидеть? Достаточно подготовить архив и прописать команду на распаковку с плагином ExecDos, при этом посмотрев параметры 7-Zip, которые вы будете ему передавать
Но, конечно же, проще попросить уже готовый пример, тебе помогут всё это за тебя кто-то сделает
Распаковка файлов будет производиться на рабочий стол пользователя, после распаковки будет открыта папка
В данном примере я показываю, как можно распаковать не просто полностью весь архив в папку, а как можно распаковать разные папки из архива в разные директории
Такой метод я использую в своём SFX Creator, только там код навороченнее »
Посмотрел ваш пример, для меня не сгодился, все тексты кракозябрами и криво работает, по-крайней мере на моей версии.
Пока ковырял эту тему, перетестил разные плагины и прочее по архивам., и нашел для себя нужное решение. Хоть и не идеальное, но зато теперь свой образ ISO с любым количеством файлов можно сделать и инсталлер с ними со всеми работает..

Вообщем, все зер гут, продолжаю сидеть на NSIS-ке.. :ok:

K.A.V.
09-02-2015, 18:12
Посмотрел ваш пример, для меня не сгодился, все тексты кракозябрами »
Ещё одно подтверждение того, что вам нужен далеко не пример (вы просили - я предоставил), а вам нужен конечный готовый код

Я же вам не зря писал, например, про
при этом посмотрев параметры 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 (опять же, почитав его описание и посмотрев готовые примеры в архиве с плагином), то могли бы реализовать и такое, чтобы никакая информация не отображалась в детали установки из консоли приложения, кроме файлов, которые распаковываются...

и криво работает »
Моё дело предложить, у меня прекрасно всё работает, я вам всего-лишь подкинул идею реализации с консольным приложением
Ну, раз у вас получилось реализовать другим методом, то могли бы поделиться, может, кто-нибудь и воспользуется вашим методом...

MaGoth
09-02-2015, 19:42
K.A.V.
Ещё одно подтверждение того, что вам нужен далеко не пример (вы просили - я предоставил), а вам нужен конечный готовый код »
Ну, скажем так я и сам могу сделать то, что мне требуется, просто иногда хочется видеть готовый пример(с нормально описанными комментами) уже кем-то реализованный, чем греть голову самому и тратить свободное время на очередной "лисапед на квадратных колесах"..

Моё дело предложить, у меня прекрасно всё работает, я вам всего-лишь подкинул идею реализации с консольным приложением »
Полагаю что проблема в моей версии Юникодного Нсис, а не в вашем примере.. У меня он немного расшаренный..

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


ЗЫ, Еще один момент, можете подсказать справку или что нибудь подобное применительно работы с архивами в Нсис, из вашего примера не совсем понял, как например распаковывать содержимое отдельно взятого вложенного каталога, из кучи каталогов в архиве, ибо комментов нема.. :clever-ma

K.A.V.
09-02-2015, 21:40
можете подсказать справку или что нибудь подобное применительно работы с архивами в Нсис »
Даже и не знаю, как ответить на этот вопрос...
Всё, что я видел по 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 - директория, куда распаковываются файлы

Распаковать можно с полными путями только папку, которая лежит в корне архива, нельзя распаковать (вроде бы :)) вложенную подпапку в какой-либо папке с сохранением всей структуры каталогов

MaGoth
09-02-2015, 22:57
K.A.V.
Распаковать можно с полными путями только папку, которая лежит в корне архива, нельзя распаковать (вроде бы ) вложенную подпапку в какой-либо папке с сохранением всей структуры каталогов »
Вот конкретно распаковка вложенных каталогов и интересовала в этом вопросе. Спасибо.
Будем копать дальше..


Зы, кстати, а где можно стянуть RAR dll для NSIS, что-то ссылок не нашел, а та что есть не робит.. ?! :dont-know

K.A.V.
10-02-2015, 00:08
Вот конкретно распаковка вложенных каталогов и интересовала в этом вопросе. Спасибо. »
Консольный WinRAR вроде такого тоже не умеет, либо просто я не вкуриваю, как там ключи правильно использовать :blush:

Зы, кстати, а где можно стянуть RAR dll для NSIS, что-то ссылок не нашел »
С ней нужно тягать ещё unrar.dll свежей версии, чтобы поддерживалась распаковка современных RAR5 архивов, в архиве обновил до версии 5.20, вроде распаковка работает

Не забудьте, что nsisUnRar2 будет работать только при использовании граф. интерфейса (при исполнении из секции), может, запустите и из под .onInit, копайтесь, если хотите, мне разбираться не особо интересно в этой теме :)




© OSzone.net 2001-2012