Показать полную графическую версию : Модифицированный SFX модуль 7-Zip'а для установок
sNc-DAntES
25-11-2015, 00:30
Доброго времени суток. Скажите пожалуйста, как узнать из-за чего возникает данная ошибка при распаковке 7zip архива?
Архив создаётся командой:
7z a -ssw -mx9 -mmt=on -ms=on -y "d:\Downloads\Torrents\!BackUp\Totalcmd_%date%.7z" "c:\Program Files\Totalcmd"
Затем из него создаётся SFX архив командой:
COPY /b "c:\Program Files\7z SFX Tools\7zsd_LZMA2.sfx" + "c:\Program Files\7z SFX Tools\Totalcmd.txt" + "d:\Downloads\Torrents\!BackUp\Totalcmd_%date%.7z" "d:\Downloads\Torrents\!BackUp\Totalcmd_%date%.exe"
txt файл с параметрами прилагается.
При дальнейшей попытке распаковать SFX архив получаю ошибку, как на скрине. Подскажите, пожалуйста, чем это может быть вызвано и где искать? Спасибо.
Ж.Д.А.Л.К.Е.Р.
25-11-2015, 01:08
Потому что метод сжатия примененный для создания архива не поддерживается данным модулем, он только для LZMA2.
Используя 7zsd_LZMA2.sfx я сжимаю так:
"%ProgramFiles%\7-Zip\7z.exe" a FiraDisk.7z -r .\Temp\* -mmt2 -m0=BCJ2 -m1=LZMA2:d48m:fb273 -m2=LZMA2:d21:fb273 -m3=LZMA2:d21:fb273 -mb0:1 -mb0s1:2 -mb0s2:3
Число 48 это размер словаря, можно его увеличить и получить большее сжатие, но тогда потребуется больше ОЗУ для распаковки. Подбирай себе оптимальное, на сколько я помню при 48 ставились программы на WinDows Xp с 128Мб ОЗУ без ошибок о нехватки памяти.
sNc-DAntES
25-11-2015, 01:26
Потому что метод сжатия примененный для создания архива не поддерживается данным модулем, он только для LZMA2.
Используя 7zsd_LZMA2.sfx я сжимаю так: »
Простите, я только начинаю вникать в архивирование из командной строки. Не совсем понял про какой метод идёт речь. Я, вроде, метод сжатия не указываю.
По поводу вашей строки:
1. Не совсем понимаю, зачем указывать несколько методов?
2. -mb0:1 -mb0s1:2 -mb0s2:3 эту часть не понял вообще.
Ж.Д.А.Л.К.Е.Р.
25-11-2015, 16:09
В именах файлов модулей указан метод сжатия который они поддерживают. 7-Zip раньше по умолчанию создавал архивы в LZMA, потом с какой-то версии дефолтным стал LZMA2. Я так понял у тебя архив создался в LZMA, а модуль поддерживает только LZMA2, поэтому и ошибка.
1. Лучше сжатие.
2. Из справки 7-zip.chm, описание ключа -m:
b{C1}[s{S1}]:{C2}[s{S2}]
Связывает выходной поток S1 в кодере C1 с входным потоком S2 в кодере C2. Если номер потока не будет определен, то будет использоваться поток с номером 0.
Обычно кодер имеет один входной поток и один выходной поток. В 7z некоторые кодеры могут иметь множественные потоки ввода и вывода.
Например, BCJ2 кодер имеет один входной поток и четыре выходных потока.
sNc-DAntES
25-11-2015, 17:05
Нет, справку я читал. Я не совсем понимаю, что это за потоки и зачем их связывать? По поводу первого пункта понятно.
у тебя архив создался в LZMA, а модуль поддерживает только LZMA2 »
Немного поправлю: модули LZMA2 поддерживают оба метода и LZMA, и LZMA2. Это можно посмотреть с ключом -sfxversion
https://dl.dropboxusercontent.com/u/35142695/7zsxfmod_mtd.png
Проблема может быть в фильтре Delta, но для этого нужно знать версии архиватора, модуля, и наличия wav файлов в архиве.
SergeyZV
05-12-2015, 17:07
gora, Уважаемый! Скажите пожалуйста какие записи реестра отвечают за создение SFX архива? Кнопка и 7-zip устанавливаются вроде без ошибок, но подозреваю что реестр касячит. Кнопка пишет что SFX создан, но размер SFX 0 байт. И через командную строку и через 7z SFX Builder тоже не создаётся. Что делать?
minutka15
08-12-2015, 03:52
Ребята нужна помощь,
Сразу оговорюсь что не силён в 7z и возможно такой вопрос уже задавался,
но я информацию не нашел или плохо искал.
В общем у меня установщик вот такого характера, пользователю дана возможность
выбрать одну из 4х директорий для установки программы.
Всё это выглядит примерно вот так:
SetEnvironment="WAY1=%7zSfxFolder38%\\MyProgram01"
SetEnvironment="WAY2=%7zSfxFolder38%\\MyProgram02"
SetEnvironment="WAY3=%7zSfxFolder38%\\MyProgram03"
SetEnvironment="WAY4=%7zSfxFolder38%\\MyProgram04"
;ai
AutoInstall="hidcon:cmd /c xcopy \"DATA\" \"%WAY1%\" /e /i /y"
;ai1
AutoInstall1="hidcon:cmd /c xcopy \"DATA\" \"%WAY2%\" /e /i /y"
;ai2
AutoInstall2="hidcon:cmd /c xcopy \"DATA\" \"%WAY3%\" /e /i /y"
;ai3
AutoInstall3="hidcon:cmd /c xcopy \"DATA\" \"%WAY4%\" /e /i /y"
Shortcut="Pu, {%???%\\???\\MyProg.exe}, {}, {MyProgram}, {}, {MyProgram}"
Всё это работает вот только никак не получается создать ярлык программы.
В папке DATA есть подпапка и в ней "MyProgram.exe" к которому нужно создать ярлык.
Если бы знать точно с каким ключом установят, то его можно найти и вытащить куда нужно.
Как бы вы мне посоветовали действовать в этом случае?
Естественно без привлечения других программ...
не получается создать ярлык программы »
Почитайте про команду ShortcutX и префикс shcX в справке модуля.
minutka15
08-12-2015, 23:02
Спасибо, всё понял.
ShortcutX - удобная штука!
tr011_tmn
18-12-2015, 10:05
Доброго времени суток господа.
Подскажите есть ли возможность задавать в файле конфигурации разные "FinishMessage".
Например:
RunProgram=" if условие 1 (выполняем команду) else (FinishMessage= условие не выполнено)
и соответственно выход
или это невозможно реализовать в рамках модифицированного модуля
есть ли возможность задавать в файле конфигурации разные "FinishMessage". »
Думаю, что можно, если запускать sfx рекурсивно с ключем -FinishMessage="другой текст"
AutoInstallA="%%S\\%%M -FinishMessage="другой текст""
если запускать sfx рекурсивно »
При этом архив будет распаковываться дважды. И что будет с основным FinishMessage, после того отработает предложенная вами команда?
tr011_tmn,
Предлагаю вообще не использовать FinishMessage, а в выводить MsgBox при помощи mshta:
mshta vbscript:execute("Text=""Пример вывода строк"":Title=""Заголовок"":Res=MsgBox(Text,vbOkCancel+vbInformation+vbDefaultButton2,Title):If Res=vbOk Then MsgBox ""Нажата кнопка OK"" End If:MsgBox ""Нажата кнопка нет"":close")
Только надо учитывать, что mshta накладывает ограничение на количество символов.
minutka15
27-12-2015, 23:34
Может мне кто-нибудь подсказать причину, почему в свойствах у создаваемого ярлыка "Рабочая папка" пусто?
Сам ярлык от программы функционирует, однако не во всех программах.
Были у меня программы которые после установки и запуска ругались на отсутствие каких то файлов из установленной директории, хотя всё было на месте. Использовал различные версии модулей.
Читал в справке про {working_directory}, вписывал установочный путь сотню раз, ничего не получается...
А вот делаю любой ярлык при помощи winrar-а то в свойствах ярлыка в поле "Рабочая папка" путь присутствует.
Из за этого в тех программах которые ругаются на отсутствие файлов в установленной директории, я тупо создаю winrar sfx - пустышку с каким нибудь *.txt файлом где прописываю ярлыки к программе типа:
Path=%programfiles%\MyProgramFolder
Silent=1
Overwrite=1
Shortcut=D, "%programfiles%\MyProgramFolder\Myprogram.exe", "MyProgramFolder", "", "MyProgramName"
И всё работает.
Либо просто в ручном режиме создаёшь ярлык от исполняемого файла и запускаешь.
Вот никак понять не могу, в чём причина.
---------------------------------------------------------------
Нашел решение и вопрос снят.
Причина была в отсутствии мозгов.
Oleg_Sch
31-12-2015, 06:19
Всех с наступающим Новым Годом!
С пылу, с жару - подарки.
С учетом "с пылу, с жару", пока только прямые ссылки, обновления сайта и SVN уже в следующем году
1.5.2.3807
1.6.0.3807
Из изменений - использование последней версии исходных текстов 7-Zip (15.12)
SergeyZV
31-12-2015, 12:42
Oleg_Sch, Спасибо! И вас с новым годом!!!
Уже новая версия 7-Zip (15.14).
И огромное СПАСИБО gora за новую версию кнопки (http://buttontc.7zsfx.info/files/setup_button_5.1.0_x86_x64_151225_11-19.7z)
j1490442
01-01-2016, 22:16
Oleg_Sch, скажите, пожалуйста, какая разница между 1.52 и 1.60?
Да и 7zip уже к 15.14 обновился за эти пару дней...
vladshishkin
03-01-2016, 10:24
Утилита для просмотра файла конфигурации и версии модуля, без разборки 7ZipSFX
7ZipSFX Config Extractor v1.0 (http://usbtor.ru/dl.php?id=719)
Утилита для просмотра файла конфигурации »
Недостатки:
1 Размер в 4МБ для таких задач великоват
2 Извлекается только первая секция конфига (если их несколько)
3 Текст (UTF-8) отображается в стандартной кодировке и, если конфиг содержит не только латиницу, то он не читабелен в окне программы.
vladshishkin
03-01-2016, 10:56
1 Ну... не все пишут на C++...
2 Это как? Приведите пример. Впервые слышу.
3 Знаю... Может что то изменится в новой версии, если автор соизволит...
Хочу поблагодарить Олега Щербакова, за то что обновляет модули. Не забывает о нас и дарит нам такие подарки.
С новым 2016 годом!!!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.