Войти

Показать полную графическую версию : Модифицированный SFX модуль 7-Zip'а для установок


Страниц : 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

regist
24-10-2016, 17:24
Извиняюсь за офтоп, немного дополню.
даже не знал что существует такая возможность.
для того чтобы она существовала, надо периодически самому заходить и сохранять в архив интересные вам страничку и сайты. И об этом надо думать заранее, а не когда уже это произойдет. А то может быть так, что зайдёте и нужного вам сайта в архиве нет. В том числе рекомендую сохранять и интересные вам темы на осзоне и т.д.
Есть ещё сайт http://archive.is/ но тут нельзя переходить по внутренним ссылкам (зато в него можно загонять странички из кеша яндекса, гугла )
PS. Как только узнал о смерти Гора, то постарался все странички его сайта (не только по модулям, а все) загнать в web.archive.org.

specialist
24-10-2016, 17:34
regist, да, дела... год какой-то печальный. надеюсь хоть форум ru-board не упадет в связи с кончиной его основателя.

Victor_Man
15-11-2016, 22:45
Цитата sov44:
Malysh-ok, по крайней мере в модифицированном модуле 1.7.0 Develop, сборка 3873 эта функция работает. Папка *.sfx.api.* действительно не создаётся, однако запустить командную строку либо стороннее приложение всё-же возможно. »
Да, работает - команды можно запускать до распаковки.
Аналогично работает и PreExtract.
Кстати, наконец с этой функцией я сделал вариант предотвращения повторной загрузки...иногда бывает нужно.
Чтобы не портить первую загрузку (точнее - не портить распаковку первой загрузки, т.к. там могли быть изменения).
Вот пример для Terabyte Image for Windows:
https://www.upload.ee/files/6353432/TBIW304_NoSound.rar.html
Способ, кстати, универсальный: нужно вставить одну строку в файл конфигурации и один маленький .cmd в папку проекта.
Править строку и файл не нужно - все берется из переменных.
===========================================
А, пароль-то ru-board :)

Victor_Man
18-11-2016, 14:45
Еще модифицировал, функции:
- Предотвращение запуска второй копии проекта для исключения нарушения работы первой копии.
- Восстановление измененных файлов и реестра в случае краха или случайной перезагрузки системы во время работы проекта.
https://www.upload.ee/files/6360739/7ZipSFX_MOD.rar.html
Описание внутри.
Приложен пример для Minitool Partition Wizard.
Пароль - ru-board
=========================
Еще модернизировал - при крахе/перезапуске системы восстанавливается окружение.
Поэтому в сценарии завершения их можно все использовать.
Вроде теперь уже совсем универсально получилось.
https://www.upload.ee/files/6377275/PW91_Fix6.rar.html
Ну и окончательно добил по нюансам с32-битными программами на x64.
И добавил в инструкцию описание по созданию проекта. Приложены три разные проекта.
https://www.upload.ee/files/6397683/7zSFX_Fix9.1.rar.html (https://www.upload.ee/files/6392364/____All.rar.html)
Теперь все как-то проще и единообразнее получается - берешь шаблон и правишь.
Попробовал на нескольких проектах - проблем не обнаружил (Win7x86, Win7x64, Win10x64).
================================================
В последней ссылке - Fix9 учтена поправка Ж.Д.А.Л.К.Е.Р. и добавлена небольшая защита от локального запуска файлов.
Теперь должна работать на ХP(кроме Home)/2003/7/2008 R2/8/10.
================================================
Небольшая модернизация z1_KillTask.cmd - корректное завершение при случайно оставшейся папке в %InstallPath%
https://www.upload.ee/files/6540914/7zSFX_Mod_Fix10.rar.html
Текст z1_KillTask.cmd

@echo off
:: Exit under the mistaken launch
if NOT "%zz_T%\"=="%~dp0" Exit
cd /d ""%~dp0"
rd "%SfxVarApiPath%"
For /F "Skip=1 Tokens=1,2 Delims=," %%I In ('Tasklist /FO CSV /FI "IMAGENAME eq %zz_M%" /NH ') Do (If %%I=="%zz_M%" Set PID=%%~J)
:: Kill our task, if it is the second
If Defined PID TaskKill /PID %PID% /T /F
:: Otherwise, finish the unfinished previous run and exit to 7zSFX script
if exist z3_Stop.cmd z3_Stop.cmd
По смыслу примерно то же, что [у]Ж.Д.А.Л.К.Е.Р[/b] тут
http://forum.oszone.net/post-2694448.html#post2694448
Плюс корректное удаление некорректно завершенного предыдущего старта (последняя команда - if exist z3_Stop.cmd z3_Stop.cmd).
========================================================================
Ну, и еще раз вернусь к этому вопросу. В предыдущем варианте использовался z1_KillTask.cmd от первого запущенного проекта.
Основная причина - на момент выполнения PreExtract нет еще никаких файлов (скриптов) для управления.
Сделал вариант v2 - скрипт создается непосредственно в команде PreExtract:
Решил отказаться от варианта с созданием z1_KillTask.cmd в команде PreExtract. Он вроде рабочий, но.....после длительного тестирования - запускал из .cmd несколько копий - он более чувствительный, иногда, хотя и редко, копии оставались в памяти. Реально таких многократных запусков быть не может, конечно, но, тем не менее, как говорится - лучшее враг хорошего.
Немного подшаманил V1 (мод. варианта Ж.Д.А.Л.К.Е.Р - должен работать на W2003:
https://www.upload.ee/files/6672538/7zSFX_MOD_v12.rar.html (https://www.upload.ee/files/6672396/7zSFX_MOD_v12.rar.html)

magsood
19-11-2016, 14:17
How last version 7zsd?!

Victor_Man
23-11-2016, 14:43
magsood,
http://forum.oszone.net/showthread.php?p=2480942&highlight=7zsdrc.exe#post2480942
==========================================================
All - Еще модернизировал свое решение - см. пост выше.
http://forum.oszone.net/post-2688624.html#post2688624
Проверял на Win7x86, Win7x64, Win10x64.

vladshishkin
24-11-2016, 14:47
Victor_Man, Молодец, круто придумал. Только вот... в WinPE может и не оказаться tasklist или taskkill и SFX(батник) выдаст ошибку...
А вообще, это очередной костыль... Автор мог бы и добавить команду убийства процесса в модуль...

Victor_Man
28-11-2016, 01:05
vladshishkin,
Для WinPE оно не так и актуально, наверное. Защита от перезагрузки вообще не нужна.
А вот на реальной системе перезагрузка во время работы может прилично попортить систему.
Вот посидел немного, добил нюансы с 32-битными программами на x64.
Теперь все как-то проще и единообразнее получается - берешь шаблон и правишь.
Попробовал на нескольких проектах - проблем не обнаружил (x86, x64).
http://forum.oszone.net/post-2688624.html#post2688624

Ж.Д.А.Л.К.Е.Р.
28-11-2016, 18:09
Victor_Man, - Предотвращение запуска второй копии проекта для исключения нарушения работы первой копии. »
Не работает на Windows Server 2003, Windows Xp Home. В 2003 поиск в tasklist не работает - tasklist /FO CSV /FI "IMAGENAME eq svchost.exe" /NH выдает "Ошибка: Фильтр поиска не опознан." А на Home не работает потому что в ней нет tasklist.exe, taskkill.exe файлов.


Упростил и добавил поддержку 2003:
PreExtract="%%P:hidcon:cmd /c \"\"%%T\\KillDuplicate.cmd\" \"%%T\" \"%%M\"\""

KillDuplicate.cmd:

Cd /d %1
Rd "%SfxVarApiPath%"
For /f "Tokens=1,2 Delims=," %%I In ('TaskList /fo CSV /nh') Do (
If %%I==%2 (
Set /a N+=1
Set PID=%%~J
)
)
If %N% EQU 1 Rd /s /q %1
If %N% GTR 1 TaskKill /pid %PID% /t /f


Проверял на Хр/2003/7/2008 R2/8/8.1/10.

Victor_Man
28-11-2016, 23:49
Ж.Д.А.Л.К.Е.Р.,
Ну, спасибо!
И - Fix9 (http://forum.oszone.net/post-2688624.html#post2688624) учтена поправка Ж.Д.А.Л.К.Е.Р. и добавлена небольшая защита от локального запуска .cmd.

Ж.Д.А.Л.К.Е.Р.
09-12-2016, 23:56
Изменил KillDuplicate.cmd (http://forum.oszone.net/post-2691234-1790.html) - на случай если предыдущий запуск проекта был внезапно завершен (к примеру пропало электричество/пользователь закрыл батник/антивирус прибил файлы проекта) и файлы в InstallPath остались, то раньше повторный запуск проекта приводил к автоматическому его завершению (так как файлы распакованы и срабатывала защита от повторного запуска). То теперь происходит подсчет запущенных копий проекта, если процесс один - удаляем InstallPath каталог, если процессов больше чем один - убиваем второй запущенный.
Тестируйте.

X-RayPro
10-12-2016, 23:50
Если кому интересно,простенький редактор конфиг-файлов
http://X-RayPro.ru.
Прошу сильно не пинать, версия БЕТА.
Предложения и отзывы приветствуются.

nibble74
30-12-2016, 21:51
Oleg_Sch,


Нашел неисправность с обработкой префиксов shc0: и del0: в файле конфигурации.

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

С версией модуля 160.2712 - работает.
С версиями модуля 170.3873 и 3900 - не работает, ярлык всё равно создаётся при наличии префикса shc0:

К сожалению других версий модулей у меня нет.

SySh
02-01-2017, 23:37
Oleg_Sch,
Нашел неисправность с обработкой префиксов shc0: и del0: в файле конфигурации.
Проверьте пожалуйста, вложил в файле тестовый вариант создания ярлыка на рабочем столе.
С версией модуля 160.2712 - работает.
С версиями модуля 170.3873 и 3900 - не работает, ярлык всё равно создаётся при наличии префикса shc0:
К сожалению других версий модулей у меня нет. »
Имя пользователя: Oleg_Sch
Последняя активность: 25-07-2016 01:50

После версий 1.6 такая беда, как вариант:
;!@Install@!UTF-8!
BeginPrompt="[Да] установка без ярлыка
\n[Да] + [Shift], установка с ярлыком"
GUIFlags="2+4+8+16+32+2048"
GUIMode="2"
RunProgram="shc0:hidcon:cmd /c echo."
RunProgram="forcenowait:hidcon:cmd /c Ping -n 10 LocalHost>Nul& Del /Q \"%7zSfxFolder16%\\Ярлык Тест.lnk\">Nul"
AutoInstall="hidcon:cmd /c echo."
Shortcut="Du,{%7zSfxFolder36%\\notepad.exe},{},{},{},{Ярлык Тест},{%7zSfxFolder36%\\notepad.exe},{}"
;!@InstallEnd@!

nibble74
03-01-2017, 08:06
Мда уж, придётся как то так ухитряться.

Victor_Man
09-01-2017, 22:43
Цитата Ж.Д.А.Л.К.Е.Р.:
Изменил KillDuplicate.cmd - на случай если предыдущий запуск проекта был внезапно завершен (к примеру пропало электричество/пользователь закрыл батник/антивирус прибил файлы проекта) и файлы в InstallPath остались, то раньше повторный запуск проекта приводил к автоматическому его завершению (так как файлы распакованы и срабатывала защита от повторного запуска). То теперь происходит подсчет запущенных копий проекта, если процесс один - удаляем InstallPath каталог, если процессов больше чем один - убиваем второй запущенный.
Тестируйте. »
Да, в моем первом варианте было именно так по алгоритму: процесс убивался, если он второй.
Т.е. если первого процесса не было (просто осталась папка непонятно каким способом), то вторая копия запускалась поверх.
Я тоже уже пару раз столкнулся при экспериментах с остающимися папками в %InstallDir% .
Сделал немного по-другому, - добавил полное завершение предыдущей некорректной загрузки.
http://forum.oszone.net/post-2688624.html#post2688624

Ж.Д.А.Л.К.Е.Р.
10-01-2017, 00:25
Victor_Man, И снова Tasklist /FO CSV /FI "IMAGENAME eq %zz_M%" /NH, который не работает на 2003.

CryptoNick
14-01-2017, 13:36
Залез я в старую версию кнопки gora и нашел микро утилиту tasktool.exe ~2kb она умеет убивать и получать список процессов VT 1/57
Ссылка (http://rgho.st/8yR2dpmNj) на инсталлер кнопки
Пример:
tasktool -kn totalcmd.exe убить
tasktool -la получить список

mbsystem
15-01-2017, 09:45
http://utilfr42.free.fr/dn/Kill.zip

CryptoNick
17-01-2017, 19:33
Не задокументированные ключи SFX !!!

Просмотр диалоговых окон, готового проекта

-sfxtest:D:B Начальное окно
-sfxtest:D:P Выбор пути распаковки
-sfxtest:D:E:300 Прогресс распаковки
-sfxtest:D:C Сообщение отмены
-sfxtest:D:F -fm30 Финишное сообщение
-sfxtest:D:H Вывод справочной информации
-sfxtest:D:W Сообщение недостаточно места
-sfxtest:D:Z Сообщение о ошибка
-sfxtest:D:X Окно ввода пароля

Так можно тестировать дизайн диалогов, не собирая в проект
модуль -sfxtest:D:B -sfxconfig:путь к файлу конфигурации

Проверка синтаксиса (ошибок в сценарии)
модуль -sfxtest:cc -sfxconfig:путь к файлу конфигурации
Код возврата модуля:
0 - все хорошо
4 - ошибка в синтаксисе сценария

"Тихий" режим:
модуль -sfxtest:CC -sfxconfig:путь к файлу конфигурации
При использовании заглавных букв CC определяется только код возврата, а окно ошибки модуля на выводится


Запуск с повышением прав (от имени Администратора)
-sfxelevation
Равносильно ключу MiscFlags="4" в сценарии, без изменения манифеста.

Запуск с ожиданием закрытия всех запущенных дочерних процессов
-sfxwaitall:0
Равносильно префиксу waitall:




© OSzone.net 2001-2012