MultiArc
Модераторы: Моторокер, Avada, CaptainFlint, Nik, d-view
Я игрался только с torrentcheck:Вдруг кто игрался.
https://sourceforge.net/projects/torrentcheck/
Правда сам не знаю зачем
Multiarc.ini
Код: Выделить всё
[Torrent]
Archiver=%COMMANDER_PATH%\Plugins\arc\torrent\tor.bat
Description=Torrent
Extension=torrent
ID=64 34 3A, 64 37 3A, 64 38 3A, 64 31 33 3A
IDPos=0
Start="---"
Format0=" +z+ n++"
List="%PQA %AQA %O %E2"
ExtractWithPath=
Debug=0
BatchUnpack=0
Код: Выделить всё
CHCP 65001
"%~dp0torrentcheck.exe" -n -t %1 > "%TEMP%\1"
"%~dp0u82a.vbs"
TYPE "%TEMP%\2"Код: Выделить всё
Private Const adReadAll = -1
Private Const adSaveCreateOverWrite = 2
Private Const adTypeBinary = 1
Private Const adTypeText = 2
Private Const adWriteChar = 0
Const SystemFolder = 1, TemporaryFolder = 2
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim tempFolder: tempFolder = fso.GetSpecialFolder(TemporaryFolder)
Dim f, sFile
UTF8toANSI tempFolder & "\1", tempFolder & "\2"
Set f = fso.GetFile(tempFolder & "\2")
if f.Size < 1024 Then
sFile = fso.OpenTextFile(f, ForReading, False, TristateFalse).ReadAll
if InStr(1, sFile, "---------------", 1) = 0 Then
aLines = Split(sFile, vbNewLine)
if Ubound(aLines) < 3 Then
MsgBox sFile, vbOKOnly + vbCritical, "Ошибка"
sOut = " " & "0" & " ! Error torrentcheck !"
else
a3 = Split(aLines(2), " : ")
if Ubound(a3) > 0 Then
a4 = Split(aLines(3), " : ")
a42 = Split(a4(1), " ")
sOut = " " & a42(2) & " " & a3(1)
else
MsgBox sFile, vbOKOnly + vbCritical, "Ошибка"
sOut = " " & "0" & " ! Error torrentcheck !"
end if
end if
Set fo = fso.OpenTextFile(f, ForAppending, True, TristateFalse)
fo.Write vbNewLine
fo.Write "--- ----------- ---------------------------------------------------------------" & vbNewLine
fo.Write sOut
fo.Close
End If
End If
Set fso = nothing
Private Sub UTF8toANSI(ByVal UTF8FName, ByVal ANSIFName)
On Error Resume Next
Dim strText
With CreateObject("ADODB.Stream")
.Open
.Type = adTypeBinary
.LoadFromFile UTF8FName
.Type = adTypeText
.Charset = "utf-8"
strText = .ReadText(adReadAll)
.Position = 0
.SetEOS
.Charset = "windows-1251"
.WriteText strText, adWriteChar
.SaveToFile ANSIFName, adSaveCreateOverWrite
.Close
If Err.Number <> 0 Then
fso.CopyFile tempFolder & "\1", tempFolder & "\2"
End if
End With
End Sub
Orion9
Работает через свои TCZSTD32.DLL и TCZSTD64.DLL, это я в курсе. Равно как и менюшки свои есть, их можно даже посмотреть в моей сборке (на рутрекере раздаю, но в этой теме приводить не буду, ибо варез).
Ну да ладно. Наверное, с облегчением можно констатировать факт, что сейчас уже действительно мало смысла прикручивать сабжа к мультиарку. Тем более, что сам zst формат не умеет ни в атрибуты, ни в >1 файла, ни во что вообще. Простой компрессор без контейнера, как это сделано во всяких там bzip, gzip, xz...
Работает через свои TCZSTD32.DLL и TCZSTD64.DLL, это я в курсе. Равно как и менюшки свои есть, их можно даже посмотреть в моей сборке (на рутрекере раздаю, но в этой теме приводить не буду, ибо варез).
Ну да ладно. Наверное, с облегчением можно констатировать факт, что сейчас уже действительно мало смысла прикручивать сабжа к мультиарку. Тем более, что сам zst формат не умеет ни в атрибуты, ни в >1 файла, ни во что вообще. Простой компрессор без контейнера, как это сделано во всяких там bzip, gzip, xz...
Раз пошла такая пьянка, завалялся у меня еще один пример, который так и не был доведен до ума. Так что сугубо в качестве примера: как заходить через ExifTool в файлы с мета-данными.
Multiarc.ini
exiftool.bat
Multiarc.ini
Код: Выделить всё
[ExifTool]
Archiver=%COMMANDER_PATH%\Plugins\wlx\ExifToolView\exiftool.bat
Description=ExifTool
Extension=jpeg
ID=FF D8 FF, 38 42 50 53, 49 49, 4D 4D, 52 49 46 46, D0 CF 11 E0 A1 B1 1A, 4A 46 49 46, 89 50 4E 47, 47 49 46 38 39, 8B 4A 4E 47
IDPos=0
Start="---------------"
Format0=n++
List="%PQA %AQA %O"
ExtractWithPath=
Debug=0
BatchUnpack=0
Код: Выделить всё
SetLocal EnableExtensions
CHCP 866
cls
@echo off
@echo ---------------
"%~dp0exiftool.exe" -G -S %1Есть приложение innounp home site, GitHub, которое продолжает развитие ранее одноимённого приложения innounp 0.5.
Сейчас столкнулся с проблемой при распаковке файлов/папок в названии которых содержится "пробел(ы)" при использовании такого конфига:
Проблематика возникает в данном моменте "@%LQ", в листинг файл добавляются кавычки, которые innounp не требуются и он может извлечь файлы без них.
Если исключить в конфиге добавление кавычек в именах с пробелами, то возможно уже извлечь файлы, но до момента пока не пройти в папку в названии которой будет пробел.
В данном случае будет ошибка
В данной ошибке смущает вот этот момент
почему-то на конце через пробел появляется знак "\"
или наоборот, знак "\" появляется перед.
Проблема в конфиге, в самом плагине MultiArc или автору innounp требуется "допилить" парсинг листинга (чтобы кавычки тоже мог принимать во внимание или самостоятельно их исключать)?
Рядом с файлом lst64ED.tmp, появляется другой файл zha64EE.tmp, в котором скорее всего и есть причина ошибка
MultiArc 1.4.4.174
Сейчас столкнулся с проблемой при распаковке файлов/папок в названии которых содержится "пробел(ы)" при использовании такого конфига:
Код: Выделить всё
[InnoSetup - unp]
Description="InnoSetup"
Archiver="%$MULTIARC%\EXE\InnoSetup\innounp.exe"
ID=49 6E 6E 6F
IDPos=<SeekID>
Start="^--------------------------------------"
End="^--------------------------------------"
Format0="zzzzzzzzzz yyyy.tt.dd hh:mm +n++"
List="ConPaste.exe /s /h%AQ /c%AWQ /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" %P -v -m %AQ"
Extract="ConPaste.exe %C /s /h%AQ /c%AWQ /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" %P -e -m -c%R %AQ @%LQ"
ExtractWithPath="ConPaste.exe /s /h%AQ /c%AWQ /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" %P -x -m -c%R %AQ @%LQ"
AskMode=0
BatchUnpack=1
Debug=1
IgnoreErrors=0
SearchForUglyDirs=0
SkipDirsInFileList=0
SkipEmpty=0
SkipLIST=1
SkipSfxHeader=1
UnixPath=0Если исключить в конфиге добавление кавычек в именах с пробелами, то возможно уже извлечь файлы, но до момента пока не пройти в папку в названии которой будет пробел.
В данном случае будет ошибка
Код: Выделить всё
---------------------------
Внимание
---------------------------
Похоже, при выполнении команды возникла ошибка, т.к. был получен код возврата 3:
ConPaste.exe /s /h\"d:\Download\TC_build\iZotope Trash 1.3.0\iZotope.Trash.v1.3.0-TCD.exe\" /ciZotope.Trash.v1.3.0-TCD.exe /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" D:\TOTALCMD\plugins\wcx\MultiArc\\EXE\InnoSetup\innounp.exe -x -m -c{app}\Presets\Trash Lite \"d:\Download\TC_build\iZotope Trash 1.3.0\iZotope.Trash.v1.3.0-TCD.exe\" @C:\Users\JenTOSO\AppData\Local\Temp\$mltwcx\lst64ED.tmp
Полученное значение выше допустимого. Пожалуйста, проверьте конфигурацию текущего типа в файле MultiArc.ini (в том числе параметр %Enn и опцию IgnoreErrors).
---------------------------
ОК
---------------------------Код: Выделить всё
-c{app}\Presets\Trash Lite \или наоборот, знак "\" появляется перед.
Код: Выделить всё
\"d:\Download\TC_build\iZotope Trash 1.3.0\iZotope.Trash.v1.3.0-TCD.exe\"Рядом с файлом lst64ED.tmp, появляется другой файл zha64EE.tmp, в котором скорее всего и есть причина ошибка
Код: Выделить всё
innounp - the Inno Setup Unpacker, Version 2.65.3 (06.11.2025)
Inno Setup archive: Lite
Cannot open or read the specified file: "d:\Download\TC_build\iZotope Trash 1.3.0\Lite"
==> Не удается найти указанный файл
TC 11.58 combo, Windows 11 x64
Что имеется в виду под исключением в конфиге: использовать мальнькую "l" вместо большой "L"? Если да, то у меня все работает.jentoso писал(а):Если исключить в конфиге добавление кавычек в именах с пробелами, то возможно уже извлечь файлы, но до момента пока не пройти в папку в названии которой будет пробел.
Попробуйте совсем убрать "-c%R" из строки распаковки, и без этого ключа должно работать. Моя строка:jentoso писал(а):В данной ошибке смущает вот этот момент
Код: Выделить всё
ExtractWithPath="ConPaste.exe /s /h%AQ /c%AWQ /p"Введите пароль к дистрибутиву:" "Type in a password" %PQA -x -m %AQA {@%lQ}"Имелось ввиду вот эта часть конфига "@%LQ", где Q заключает в кавычки длинные имена с пробелами.Что имеется в виду под исключением в конфиге: использовать мальнькую "l" вместо большой "L"? Если да, то у меня все работает.
Новая версия innounp при работе с листнг-файлом не учитывает кавычки, они ей не требуются. Автор ответил, что автоматическое удаление кавычек в списке файлов в следующем обновлении реализует.
В этом нет необходимостиПопробуйте совсем убрать "-c%R" из строки распаковки, и без этого ключа должно работать.
-cDIR - specifies that DIR is the current directory in the installation
%R - Target subdirectory inside archive
TC 11.58 combo, Windows 11 x64
Ну, если у меня все работает, то может быть необходимость таки есть? )jentoso писал(а):В этом нет необходимости
И?..jentoso писал(а):-cDIR - specifies that DIR is the current directory in the installation
%R - Target subdirectory inside archive
Я с утра тоже в справку заглядывал:
Однако вместо списка с короткими путями получаются пути без кавычек.%l - Filelist with short file names
Вообще-то я думал, что модификатор Q применяется только к путям передаваемых параметров (т.е. непосредственно к путям командной строки, а не путям в списке), но можно и так:
Код: Выделить всё
ExtractWithPath="ConPaste.exe /s /h%AQ /c%AWQ /p"Введите пароль к дистрибутиву:" "Type in a password" %PQA -x -m %AQA @%LA"Orion9
Да, оба варианта рабочих. Все файлы/папки содержащие пробелы без проблем извлекаются.
Конечно есть еще одна проблемка, но здесь уже видимо ничего не поделать. Внутри есть файл, который в имени содержит такой символ

а видится в ТС и командной строке

Добавлено спустя 42 минуты:
Код: Выделить всё
ExtractWithPath="ConPaste.exe /s /h%AQ /c%AWQ /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" %PQA -x -m %AQA {@%lQ}"Код: Выделить всё
ExtractWithPath="ConPaste.exe /s /h%AQ /c%AWQ /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" %PQA -x -m %AQA @%LA"Конечно есть еще одна проблемка, но здесь уже видимо ничего не поделать. Внутри есть файл, который в имени содержит такой символ

а видится в ТС и командной строке

Добавлено спустя 42 минуты:
И?..
Я с утра тоже в справку заглядывал:
Вот и я в справку глянул и решил, что l вместо L не пойдёт, а вышло оказывается иначеВообще-то я думал, что модификатор Q применяется только к путям передаваемых параметров (т.е. непосредственно к путям командной строки, а не путям в списке)
Благодарю.Однако вместо списка с короткими путями получаются пути без кавычек.
TC 11.58 combo, Windows 11 x64
Увы, ничего. Только плуг переделывать, а кто этим займётся, MVV? Его профиль, как и профиль любого цифрового бога, который выполнил свою миссию наjentoso писал(а):Конечно есть еще одна проблемка, но здесь уже видимо ничего не поделать.
Да это больше на баг тянет. Лучше использовать второй вариант с Q, а то не известно, где это может аукнуться. Просто я хотел посмотреть, будет ли формироваться список с короткими именами, а оказалось, что нет. Вообще справка довольно муторно написано, в свое время пришлось с ней несколько дней возиться, очень хотелось сделать рабочий конфиг на upx, который нигде не удавалось найти. В итоге сделал, но крышу чуть не сорвало.jentoso писал(а):Вот и я в справку глянул и решил, что l вместо L не пойдёт, а вышло оказывается иначе
jentoso
Я почитал топик на руборде и согласен с вами: теперь больше нет уверенности при входе в инсталлятор, что он корректно отобразиться и распакуется. По этому поводу Destiny уместно предложил, что нужно либо добавлять новый ключ в MultiArc, либо писать отдельный плагин для работы с InnoSetup.
Но не похоже, что MVV в ближайшее время будет готов взяться за доработку MultiArc, поэтому пришла идея сделать небольшую обертку для innounp.exe в виде батника и скрипта на Autorun, чтобы хотя бы была возможность видеть потенциально проблемные файлы.
В принципе, если сильно загнаться, можно сделать и распаковку, но я подумал, что в этом нет пока смысла. Сейчас скрипт просто анализирует содержимое inno-файла, и если файл содержит юникодные имена, информирует об этом при входе или распаковке. Сообщение не мешает, так как оно отображается всего секунду, но не заметить его будет сложно.
Можно не устанавливать батник и не вносить изменения в MultiArc.ini — использовать только один скрипт для анализа содержимого, повесив его на нужную комбинацию. Сейчас такой комбинацией является Alt+PgDown, но можно изменить. Скрипт написан на Autorun, т.ч. понадобится и Autorun.
Если нужно, чтобы при входе в инсталлятор скрипт автоматически предупреждал об юникоде:
Как видно из батника и ini, понадобится утилита TCFS2 и корректно указанные пути.
От себя скажу, что результат получился нормальный. Это намного лучше, чем когда вообще ничего не видно.
Я почитал топик на руборде и согласен с вами: теперь больше нет уверенности при входе в инсталлятор, что он корректно отобразиться и распакуется. По этому поводу Destiny уместно предложил, что нужно либо добавлять новый ключ в MultiArc, либо писать отдельный плагин для работы с InnoSetup.
Но не похоже, что MVV в ближайшее время будет готов взяться за доработку MultiArc, поэтому пришла идея сделать небольшую обертку для innounp.exe в виде батника и скрипта на Autorun, чтобы хотя бы была возможность видеть потенциально проблемные файлы.
В принципе, если сильно загнаться, можно сделать и распаковку, но я подумал, что в этом нет пока смысла. Сейчас скрипт просто анализирует содержимое inno-файла, и если файл содержит юникодные имена, информирует об этом при входе или распаковке. Сообщение не мешает, так как оно отображается всего секунду, но не заметить его будет сложно.
Можно не устанавливать батник и не вносить изменения в MultiArc.ini — использовать только один скрипт для анализа содержимого, повесив его на нужную комбинацию. Сейчас такой комбинацией является Alt+PgDown, но можно изменить. Скрипт написан на Autorun, т.ч. понадобится и Autorun.
Autorun
Код: Выделить всё
Global gInnoFile, gInnoList
RegisterCommand 60039 TestInno
SetHotkeyAction /K:A /H:PGDN TestInno
Func TestInno()
Local bAlt = IsPressed(0x12)
Local T1 = GetUptime(), T2 = T1, T3
Local sInno = COMMANDER_PATH & "\Plugins\arc\InnoSetup\innounp.exe"
Local sPath = RequestCopyDataInfo("SP")
Local sName = RequestCopyDataInfo("SN")
Local sFile = sPath & sName
If Not FileExist(sFile) Then
If StrPos(sFile, gInnoFile) Then sFile = gInnoFile
Else
gInnoFile = sFile
EndIf
If Not FileExist(sFile) Then
ShowHint("File doesn't exist " & sFile)
Return
ElseIf StrPos(FileGetAttr(sFile), "D") Then
ShowHint("Can't process directory " & sFile)
Return
EndIf
Local a = List(), u = List()
Local ansi, utf8, wrong, msg, i = 0
#ProcessExecGetOutput ansi %sInno% ' -v -m "%sFile%"'
ProcessExecGetOutput /C:65001 utf8 %sInno% ' -v -m -u "%sFile%"'
ansi = WideToAnsi(utf8)
a.Text = ansi
u.Text = utf8
For i = 0 to u.Count - 1
If u[i] <> a[i] Then wrong &= u[i] & auCRLF
Next
Free(a, u)
T3 = Round(GetUptime() - T1, 0) / 1000
T3 = "Operation time: " & StrFormat("%.3f", T3) & " sec"
If wrong = "" Then
If bAlt Then
If i > 10 Then
MsgBox("This installer does not contain unicode filenames." & auCRLF & auCRLF & T3, "InnoSetup", 64)
Else
MsgBox(ansi & auCRLF & T3, "InnoSetup", 48)
EndIf
EndIf
Return
EndIf
Local w = List()
w.Text = StrTrim(wrong)
For i = 0 to w.Count - 1
If i < 10 Then
msg &= w[i] & auCRLF
Else
msg & = auCRLF& auCRLF & "And " & w.Count - 1 - i & " more."
Break
EndIf
Next
Free(w)
T3 = Round(GetUptime() - T1, 0) / 1000
T3 = "Operation time: " & StrFormat("%.3f", T3) & " sec"
If bAlt Then
MsgBox("This installer contains unicode filenames:" & auCRLF & auCRLF & msg & auCRLF & T3, "InnoSetup", 48)
Else
ShowRedHint("Unicode warning")
EndIf
EndFunc
Func ShowRedHint(HintText)
SetHintParam("ShowHint", "Font", 15, "Arial")
SetHintParam("ShowHint", "BackColor", 0xFF0000)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
ShowHint(HintText, 0, 0, 1000, 1)
WinAlign(LAST_HINT_WINDOW)
Sleep(100)
SetHintParam("ShowHint", "Reload")
EndFunc
Func WideToAnsi(String)
Local sAnsi, nSize = StrLen(String)
Local buf = Buffer(nSize)
buf.Zero()
buf.SetStr(String, 0, nSize, "ANSI")
Local sAnsi = buf.GetStr(0, nSize, "ANSI")
Free(buf)
Return sAnsi
EndFuncinno.bat
::@echo off
SetLocal EnableExtensions
::chcp 866
cls
if %~z2 EQU 0 goto End
if /i "%1" =="l" goto List
if /i "%1" =="e" goto Extract
exit
:List
"%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe" /ef "tcm(60039,1)"
::echo Type in a password
"%~dp0innounp.exe" -v -m -u %2
if %errorlevel% == 0 goto End
exit
:Extract
"%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe" /ef "sendmsg(findwnd(`AUTORUN_WINDOW`),12,0,`SetVar gInnoFile %2`)"
"%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe" /ef "sendmsg(findwnd(`AUTORUN_WINDOW`),12,0,`SetVar gInnoList %3`)"
::"%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe" /ef "tcm(60039,1)"
::pause 1
"%~dp0innounp.exe" -x -m -u %2 @%3
:End
SetLocal EnableExtensions
::chcp 866
cls
if %~z2 EQU 0 goto End
if /i "%1" =="l" goto List
if /i "%1" =="e" goto Extract
exit
:List
"%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe" /ef "tcm(60039,1)"
::echo Type in a password
"%~dp0innounp.exe" -v -m -u %2
if %errorlevel% == 0 goto End
exit
:Extract
"%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe" /ef "sendmsg(findwnd(`AUTORUN_WINDOW`),12,0,`SetVar gInnoFile %2`)"
"%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe" /ef "sendmsg(findwnd(`AUTORUN_WINDOW`),12,0,`SetVar gInnoList %3`)"
::"%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe" /ef "tcm(60039,1)"
::pause 1
"%~dp0innounp.exe" -x -m -u %2 @%3
:End
Multiarc.ini
[InnoAutorun]
Description="InnoSetup"
Archiver="%COMMANDER_PATH%\Plugins\arc\InnoSetup\inno.bat"
Extension=exe
ID=49 6E 6E 6F 20 53 65 74 75 70
IDPos=<SeekID>
Start="^--------------------------------------"
End="^--------------------------------------"
Format0="zzzzzzzzzz yyyy tt dd hh mm n++"
List="ConPaste.exe /s /h%AQ /c%AWQ /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" %PQA l %AQA"
ExtractWithPath="ConPaste.exe /s /h%AQ /c%AWQ /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" %PQA e %AQA %LA"
Debug=0
BatchUnpack=1
Description="InnoSetup"
Archiver="%COMMANDER_PATH%\Plugins\arc\InnoSetup\inno.bat"
Extension=exe
ID=49 6E 6E 6F 20 53 65 74 75 70
IDPos=<SeekID>
Start="^--------------------------------------"
End="^--------------------------------------"
Format0="zzzzzzzzzz yyyy tt dd hh mm n++"
List="ConPaste.exe /s /h%AQ /c%AWQ /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" %PQA l %AQA"
ExtractWithPath="ConPaste.exe /s /h%AQ /c%AWQ /p\"Введите пароль к дистрибутиву:\" \"Type in a password\" %PQA e %AQA %LA"
Debug=0
BatchUnpack=1
От себя скажу, что результат получился нормальный. Это намного лучше, чем когда вообще ничего не видно.
Orion9
Но в целом скрипт получился отличным:!:
P.S. Окно появляется, если войти по Alt+PgDown, по команде 60039 появляется и исчезает надпись "Unicode warning".
Т.е. окно с сообщением должно закрыться? У меня оно висит, пока не нажму ОК.Сообщение не мешает, так как оно отображается всего секунду, но не заметить его будет сложно.
Но в целом скрипт получился отличным:!:
P.S. Окно появляется, если войти по Alt+PgDown, по команде 60039 появляется и исчезает надпись "Unicode warning".
TC 11.58 combo, Windows 11 x64
jentoso
Нет, у вас все правильно работает. Под исчезающим сообщением я имел в виду как раз "Unicode warning". А сообщение по Alt+PgDown только кликом или ESC закрывается.
Раньше мне намного чаще приходилось заходить и распаковывать инсталляторы, сейчас потребность стала реже. Но если вы что-то заметите, то сообщайте конечно же
Нет, у вас все правильно работает. Под исчезающим сообщением я имел в виду как раз "Unicode warning". А сообщение по Alt+PgDown только кликом или ESC закрывается.
Раньше мне намного чаще приходилось заходить и распаковывать инсталляторы, сейчас потребность стала реже. Но если вы что-то заметите, то сообщайте конечно же