PDA

Показать полную графическую версию : Создание установщика при помощи 7zSFX


minutka15
08-12-2022, 19:51
Возникла задача ...
Для удобства создания установщиков на модулях 7z-SFX сделал фичу
При помощи которой создаю установщик когда в одной папке лежат 3 необходимых файлa
name.7z
name.txt
name.sfx
И когда кликнешь правой кнопкой в данной папке в пустом поле то открываем "Запустить 7zSFX Setup Maker"


В реестре добавлено:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\Запустить 7zSFX Setup Maker]
"Icon"="C:\\Users\\UserName\\AppData\\Roaming\\Uniworker\\icons\\7z.ico"

[HKEY_CLASSES_ROOT\Directory\Background\shell\Запустить 7zSFX Setup Maker\command]
@="C:\\Users\\UserName\\AppData\\Roaming\\Uniworker\\MakeSetup.exe"

MakeSetup.exe на самом деле маленький батник конвертированный в .exe такого содержания:
@echo off
copy /b *.sfx + *.txt + *.7z Setup.exe
EXIT
После запуска с правого клика тут же создается новый Setup.exe
Так вот задача - что-бы создание установщика имело название не Setup.exe как прописано в батнике
а имя *.txt файла, то есть имело бы имя конфигурационного файла
Например у нас три файла в папке

MySetup.txt - это наш конфиг
MyArchive.7z - это наш архив с файлами
MyModule.sfx - это наш модуль sfx

Можно ли преобразовать батник "copy /b *.sfx + *.txt + *.7z Setup.exe"
чтобы вместо Setup.exe на выходе получалось бы имя существующего в папке *.txt файла ?
Например наш конфиг носит имя "StockFish.v15.1_avx2.txt"
и после запуска нашей фичи, на выходе мы имеем StockFish.v15.1_avx2.ехе

Vanadiy777
08-12-2022, 20:54
minutka15,
так не пойдет?

@echo off
for %%i in (*.txt) do set name=%%i
copy /b *.sfx + *.txt + *.7z %name%.exe
EXIT

Но, он полное название добавляет, вместе с "txt"...

Т.е. на выходе будет StockFish.v15.1_avx2.txt.exe

minutka15
08-12-2022, 23:08
Спасибо пойдет конечно!

Vanadiy777
09-12-2022, 02:14
minutka15,
вот еще можно так попробовать, через костыли, конечно:

@echo off
cd /d %~dp0
copy "*.txt" "*."
for %%i in (*.) do set name=%%i
copy /b "*.sfx" + "*.txt" + "*.7z" "%name%.exe"
del /q "*."
exit

Тогда на выходе файл с нормальным именем создается.

minutka15
09-12-2022, 02:49
Во, как раз что и нужно было :)
Пофиг - костыли-не костыли, главное работает!
Я годами пользовался через правый клик, но когда делаешь кучу всяких sfx, то одно и тоже имя на нервы действует.
А сейчас как часики.
Спасибо за труд!

minutka15
09-12-2022, 16:01
Мда, после конвертирования в exe файл на вызов из правой кнопки не работает.
Работает если только запустить из самой папки.

Vanadiy777
09-12-2022, 18:16
Мда, после конвертирования в exe файл на вызов из правой кнопки не работает.
Работает если только запустить из самой папки. »
У меня, после конвертации в ехе даже в папке не работает.
У Вас старый сконвертированный скрипт нормально отрабатывал с любого места?
Просто, по сути ехе, сделанный из cmd, это простой sfx-архив, который распаковывается во временную папку.
Соответственно и пути он ищет там же...
А вот как это обойти - пока не знаю...

minutka15
09-12-2022, 19:13
Vanadiy777
Мой старый скрипт из шапки работал все последние годы,
этот скрипт работает и в exe и в bat и через правый клик как описано в шапке.
@echo off
for %%i in (*.txt) do set name=%%i
copy /b *.sfx + *.txt + *.7z %name%.exe
EXIT
последний работает в папке и как exe и как bat,но через правый клик не хочет.
По всей видимости кусочек кода ориентируется в папку темп либо в ту папку где он сам находится (куда его кинули для правого клика).
------

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

Vanadiy777
10-12-2022, 00:33
minutka15,
чем в ехе конвертируете?
У меня ни один скрипт в ехе в папке не работает...
В cmd все ровненько, а в ехе - ни как...

Vanadiy777
10-12-2022, 00:55
этот скрипт работает и в exe и в bat и через правый клик как описано в шапке. »
minutka15,
если этот скрипт работает, то проверьте тогда этот:
@echo off
copy *.txt *.
for %%i in (*.) do set name=%%i
copy /b *.sfx + *.txt + *.7z %name%.exe
del /q *.
exit

minutka15
10-12-2022, 02:41
Vanadiy777
Как батник из папки - работает
Как exe из папки - работает
Как exe через правый клик -Заработал!
Теперь выяснилось что была виновата строка "cd /d %~dp0" тогда как утилита ковыряется не в рабочей папке а там куда ее закинули..

Почему у вас не работает?
Может защитник windows в тихоря шуршит?

minutka15
10-12-2022, 02:53
Я конвертирую при помощи quick batch file compiler, я несколько лет назад еще воткнул в свою сборку на правый клик,
там встраиваются конверторы на правый клик по reg файлу конвертировать в: bat,config7z,iss,nsis,au3,vbs и пр.
https://pixeldrain.com/u/e3KCVoTa

С учетом переделанной версии MakeSetup.ехе надо будет заменить в установленной папке "AppData\Roaming\UniWorker" если старый вариант не устроит.

Vanadiy777
10-12-2022, 11:52
Почему у вас не работает? »
у меня конвертор другой, из набора SetTools от gora...
UniWorker себе ставить не буду, у меня все необходимое уже реализовано.
Сейчас сделаю репак Quick Batch File Compiler, и себе поставлю, лишний конвертор не помешает.

minutka15
10-12-2022, 13:20
Vanadiy777,
у меня конвертор другой, из набора SetTools от gora...
Вспомнил. У меня он тоже не срабатывал. Вот именно из-за этого я и заменил на другой..

Vanadiy777
10-12-2022, 16:03
Вот именно из-за этого я и заменил на другой.. »
minutka15,
я хочу вторым отдельно поставить, перевод только доделаю.
Пусть будет, когда-нибудь пригодится все равно, как в этот раз...
У Вас какая версия Quick Batch File Compiler?

minutka15
10-12-2022, 16:53
Давно не заглядывал на версию, у меня 5.0.8.0 а последняя 5.3.0.3
надо будет подыскать..

Vanadiy777
10-12-2022, 17:18
а последняя 5.3.0.3
надо будет подыскать.. »
на нее лекарства пока нет...
Пока делаю 5.2.0.0... :)




© OSzone.net 2001-2012