Войти

Показать полную графическую версию : Модифицированный 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

evgeny1337
08-03-2016, 20:40
Здравствуйте, у меня такой вопрос, можно ли создать SFX архив с несколькими файлами , при распаковке вводить пароль на определенный файл (на каждый файл свой пароль) и распаковывался только это файл. Возможно ли так сделать? (Просто видел видео как вводили 2 разных пароля и там получалось 2 разных файла)

vladshishkin
09-03-2016, 09:08
evgeny1337, Почитай FAQ в шапке.

regist
09-03-2016, 19:14
Подскажите пожалуйста, если в каком то редакторе подсветка синтаксиса файла сценария SFX модуля »
vladshishkin, раз никто ничего не подсказал поделюсь своим способом. Правлю всё Notepad++
Для синтаксической подстветки использую либо INI, либо Haskell (выбирается там в меню). Вот скрины с примером
haskell (http://i74.fastpic.ru/big/2016/0309/3d/0efffdd26177d3dc045f26bdb71c163d.png), ms-ini (http://i74.fastpic.ru/big/2016/0309/45/7e1655c3334c126252017016776b4745.png).

vladshishkin
14-03-2016, 18:32
Это не подсветка, а раскраска. Причем не самая удачная... А жаль...

yurecnew
18-03-2016, 06:36
Oleg_Sch, Модули не запускаются на XP без SP, появляется окно "приложение неправильно настроено". Причину удалось выяснить - системе не нравится строчка манифеста:
<assemblyIdentity version="1.5.3.3819" name="7-Zip.SfxMod" type="win32"></assemblyIdentity>Может тупо удалить её? Тем более информация о версии есть в другой структуре.

P.S. Проверял на версиях 153-170

Oleg_Sch
18-03-2016, 12:05
yurecnew, странно это.
Строчка нужна, почему она вызывает такое поведение - надо разбираться
Ничего обещать не буду, надо поднимать виртуалку для тестов, а времени не хватает

yurecnew
18-03-2016, 12:43
Ничего обещать не буду, надо поднимать виртуалку для тестов, а времени не хватает »
ok. Пробовал разные варианты замены, помогает только полная замена строки пробелами в хекс-редакторе или удаление в редакторе ресурсов. Скрин с ошибкой:
http://i75.fastpic.ru/big/2016/0318/ee/212cdcf32f8c521824fcbbd1d09c8cee.png

P.S. На английской хрюше таблет едишн с sp1a модули запускаются

Oleg_Sch
21-03-2016, 06:52
Очередные обновления, пока только в SVN, обновления сайта и справки позже

1.6.2.3888-Stable (http://svn.7zsfx.info/listing.php?repname=7zSfx&path=%2Ftags%2F1.6.2.3888%2Fbin%2F):

1.6.2 Release (сборка 3888) 20.03.16
* Манифест некорректно работал в Windows XP без установленных обновлений (yurecnew:forum.oszone.net)
* Исключение при пустом файле конфигурации (gora:forum.oszone.net)

1.6.1 Release (сборка 3873) 05.03.16
* Окна некоторых дочерних процессов отображались на заднем плане (ArtXGroup:forum.oszone.net)


1.7.0.3888-Develop (http://svn.7zsfx.info/listing.php?repname=7zSfx&path=%2Ftags%2F1.7.0.3888%2Fbin%2F)

1.7 develop (сборка 3888) 20.03.16
* Манифест некорректно работал в Windows XP без установленных обновлений (yurecnew:forum.oszone.net)
* Исключение при пустом файле конфигурации (gora:forum.oszone.net)
+ Параметры 'ExtractMaskExclude', 'ExtractMaskInclude' в конфигурационном файле
+ Флаг 32 'MiscFlags' - меняет порядок обработки параметров 'ExtractMaskExclude', 'ExtractMaskInclude'
+ Дополнительная папка *.sfx.api.* в корне архива
+ Дополнительный файл конфигурации *.sfx.config в корне архива

1.7 develop (сборка 3873) 05.03.16
# Работа ключа '-nr' распространена на параметры 'ExecuteOnLoad', 'PreExtract', 'PreExtractX'




ExtractMaskExclude="mask"
Определяет маску файлов для исключения из распаковки. Параметр множественный, в каждом параметре указывается только одна маска.
Поддерживается только один тип префиксов - платформа операционной системы (x64 или x86).
Например:
ExtractMaskExclude="x86:*_x64.sfx"
- исключит из распаковки все 64-битные модули, если запуск произведен в 32-битной операционной системы
ExtractMaskExclude="*.sfx"
- исключит из распаковки все модули, независимо от системы, остальные файлы будут распакованы
Если параметр не указан и указан MiscFlags=32, то автоматически используется:
ExtractMaskExclude="*"

ExtractMaskInclude="mask"
Определяет маску файлов для распаковки. Параметр множественный, в каждом параметре указывается только одна маска.
Поддерживается только один тип префиксов - платформа операционной системы (x64 или x86).
Например:
ExtractMaskInclude="x64:*_x64.sfx"
- распакует только 64-битные модули, если запуск произведен в 64-битной операционной системы
ExtractMaskInclude="%%P:%%P\\*"
- распакует папку (%%P), соответствующую разрядности системы в которой запущен SFX и все ее содержимое, остальное пропустит
Если параметр не указан и не указан MiscFlags=32, используется:
ExtractMaskInclude="*"

MiscFlags="x"
32 - сменить порядок обработки параметров 'ExtractMaskExclude', 'ExtractMaskInclude'



Без MiscFlgs=32 Обработка идет так:
1. Проверяем 'ExtractMaskExclude'. Файл попадает в маску - НЕ распаковываем, переходим к следующему файлу
2. Тут файл не попал в маску 'ExtractMaskExclude', поэтому проверяем 'ExtractMaskInclude', если файл попадает в маску - распаковываем

С MiscFlags=32
1. Проверяем 'ExtractMaskInclude'. Файл попадает в маску - распаковываем, переходим к следующему файлу
2. Тут файл не попал в маску 'ExtractMaskInclude', поэтому проверяем 'ExtractMaskExclude', если файл попадает в маску - НЕ распаковываем



Модуль, кроме основного файла конфигурации, поддерживает дополнительный файл конфигурации, который должен быть расположен в корне архива и должен называться *.sfx.config, где вместо звездочки может быть любое имя.
Основной файл конфигурации, пусть даже пустой, всё равно должен присутствовать, т.к. именно его сигнатуры служат маркером что "это SFX архив"


Последовательность загрузки файлов конфигурации и обработка их модулем


После запуска SXF архива начинается формирование рабочего файла конфигурации. Рабочий - это тот, который и будет выполнен при данном конкретном запуске с учетом наличия основного и дополнительного файлов конфигурации, языка и разрядности системы.

Загрузка происходит так:

Сначала в рабочий файл конфигурации загружается основной файл конфигурации
Парсится и применяется командная строка, модифицируется рабочий файл конфигурации
Открывается архив и в его корне ищется дополнительный файл конфигурации *.sfx.config
Если дополнительный файл конфигурации *.sfx.config найден, то весь рабочий файл конфигурации сбрасывается
Снова в рабочий файл конфигурации загружается основной файл конфигурации
Дополнительный файл конфигурации ПОДГРУЖАЕТСЯ к рабочему файлу конфигурации
Заново парсится и применяется командная строка, модифицируется рабочий файл конфигурации
После завершения загрузки, созданный рабочий файл конфигурации обрабатывается.

Параметры обрабатываются (переопределяются/добавляются) в том порядке, в котором они были загружены и в котором они стояли в файлах конфигурации.

Если параметр НЕ множественный, то используется последнее значение. Например, если 'Title' указан в обоих файлах конфигурации, будет использован тот, который определен в дополнительном файл конфигурации.

Если параметр множественный, то он просто добавляется в список.

Если необходимо ПОЛНОСТЬЮ переопределить какой-то множественный параметр, можно обнулить список этого параметра (т.е. удалить все предыдущие), указав в нем знак, минус (-), например:

RunProgram=-


Хотя файлов *.sfx.config может быть сколько угодно, не рекомендуется увлекаться их разбиением, т.к. порядок их загрузки зависит от их очередности в архиве и может быть непредсказуем, что в свою очередь может повлиять на переопределение параметров. Для повседневных нужд достаточно разбивать на "платформа", "язык", "платформа/язык", т.е., чтобы каждый файл был со своей сигнатурой, чтобы сигнатуры не повторялись.

regist
27-03-2016, 12:55
ok. Пробовал разные варианты замены, помогает только полная замена строки пробелами в хекс-редакторе или удаление в редакторе ресурсов. Скрин с ошибкой:
http://i75.fastpic.ru/big/2016/0318/...d1d09c8cee.png
P.S. На английской хрюше таблет едишн с sp1a модули запускаются »
Скорее всего это из-за того, что в манифест находится в неправильной секции. Он находится в секции 1033 - которая для англ. локализации, поэтому на англ. системе и работает нормально.
А правильно манифест должен находиться в 0 секции.
Попробуйте редактором ресурсов удалить существующий манифест, создать в правильной и проверить проблему.

Oleg_Sch, если можно в следующем обновление модулей перенесите его в 0 секцию. А то каждый раз приходится удалять этот.

yurecnew
28-03-2016, 02:07
regist, Вы наверное пропустили, постом выше вашего лог изменений в последней версии - причина автором установлена, проблема решена. Проверьте личку...

regist
28-03-2016, 09:16
yurecnew, список изменений видел и проверил, что в новой версии манифест по прежнему в секции 1033, когда правильней его указывать в 0 (и я каждый раз из 1033 вручную удаляю). Поэтому и попросил Oleg_Sch, в следующей версии поправить.

Oleg_Sch
28-03-2016, 10:38
regist, Обязательно укажу "в 0", если Вы аргументируете, что на последней версии версии 1033 не работает.
Порядок поиска и загрузки ресурсов, конечно же "черный ящик", но скажу то, что заметил.
Если Windows не находит ресурса для языка текущего пользователя (в нашем случае "русский"), то она ищет заново с LANGID=0, т.е. для любого языка.
Ещё раз. Если Вы меня переубедите и докажите, что я не прав - ставлю в 0.

Oleg_Sch
28-03-2016, 14:01
regist, Признаюсь, зацепили ;)
Не поленился, полез в отладчики/дизассемблеры, добрался до функции LdrpSearchResourceSection из ntdll.dll

// Language ids are 16bits so any value with any bits
// set above 16 should be ok, and this value only has
// to fit in a ULONG_PTR. 0x10000 should be sufficient.
// The value used is actually 0xFFFF regardless of 32bit or 64bit,
// I guess assuming this is not an actual langid, which it isn't,
// due to the relatively small number of languages, around 70.
#define USE_FIRSTAVAILABLE_LANGID (0xFFFFFFFF & ~LDR_RESOURCE_ID_NAME_MASK)

NTSTATUS
LdrpSearchResourceSection_U(
IN PVOID DllHandle,
IN const ULONG_PTR* ResourceIdPath,
IN ULONG ResourceIdPathLength,
IN ULONG Flags,
OUT PVOID *ResourceDirectoryOrData
)

/*++

Routine Description:

This function locates the address of the specified resource in the
specified DLL and returns its address.

Arguments:

DllHandle - Supplies a handle to the image file that the resource is
contained in.

ResourceIdPath - Supplies a pointer to an array of 32-bit resource
identifiers. Each identifier is either an integer or a pointer
to a null terminated string (PSZ) that specifies a resource
name. The array is used to traverse the directory structure
contained in the resource section in the image file specified by
the DllHandle parameter.

ResourceIdPathLength - Supplies the number of elements in the
ResourceIdPath array.

Flags -
LDRP_FIND_RESOURCE_DIRECTORY
searching for a resource directory, otherwise the caller is
searching for a resource data entry.

LDR_FIND_RESOURCE_LANGUAGE_EXACT
searching for a resource with, and only with, the language id
specified in ResourceIdPath, otherwise the caller wants the routine
to come up with default when specified langid is not found.

LDR_FIND_RESOURCE_LANGUAGE_REDIRECT_VERSION
searching for a resource version in main and alternative
modules paths

FindDirectoryEntry - Supplies a boolean that is TRUE if caller is
searching for a resource directory, otherwise the caller is
searching for a resource data entry.

ExactLangMatchOnly - Supplies a boolean that is TRUE if caller is
searching for a resource with, and only with, the language id
specified in ResourceIdPath, otherwise the caller wants the routine
to come up with default when specified langid is not found.

ResourceDirectoryOrData - Supplies a pointer to a variable that will
receive the address of the resource directory or data entry in
the resource data section of the image file specified by the
DllHandle parameter.
--*/

Полная версия http://gate.upm.ro/os/LABs/Windows_OS_Internals_Curriculum_Resource_Kit-ACADEMIC/WindowsResearchKernel-WRK/WRK-v1.2/base/ntos/rtl/ldrrsrc.c
В ней можно увидеть комментарии про варианты поиска ресурса

//
// If search path includes a language id, then attempt to
// match the following language ids in this order:
//
// (0) use given language id
// (1) use primary language of given language id
// (2) use id 0 (neutral resource)
// (4) use user UI language
//
// If the PRIMARY language id is ZERO, then ALSO attempt to
// match the following language ids in this order:
//
// (3) use thread language id for console app
// (4) use user UI language
// (5) use lang id of TEB for windows app if it is different from user locale
// (6) use UI lang from exe resource
// (7) use primary UI lang from exe resource
// (8) use Install Language
// (9) use lang id from user's locale id
// (10) use primary language of user's locale id
// (11) use lang id from system default locale id
// (12) use lang id of system default locale id
// (13) use primary language of system default locale id
// (14) use US English lang id
// (15) use any lang id that matches requested info


P.S.
1. Признаю, что использование "use id 0 (neutral resource)" будет более правильным
2. Не признаю, что текущий вариант не сработает где-либо

regist
28-03-2016, 18:31
1) Не признаю, что текущий вариант не сработает где-либо »
Это было предположение почему у yurecnew, мог не работать старый вариант манифеста. yurecnew, писал, что у него работает только на англ. локализации, а у вас манифест как раз расположен в секции 1033 (англ. США) поэтому и предложил ему проверить разместив его "neutral resource" и проверить проблему с проблемным манифестом. У меня нет XP с SP1 или более старой, чтобы проверить самому. А что так правильней размещать манифест вы со мной согласны.

2) По манифесту там ещё правильней добавить шапку
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>


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

yurecnew
28-03-2016, 18:55
Это было предположение почему у yurecnew, мог не работать старый вариант манифеста. yurecnew, писал, что у него работает только на англ. локализации »
Я сразу сделал акцент на то что русская версия хрюши - без обнов совсем, а английская - с SP1A. Во всяком случае Oleg_Sch меня правильно понял. То что версия с sp1 оказалась английской просто случайность, другой с sp1 у меня нет.

P.S. Пожалуйста, 1.5.3 на оригинальном XP SP0 English VL:
http://i75.fastpic.ru/big/2016/0328/a1/e65db1f5662195c659ef52d8a8d468a1.png

Oleg_Sch
29-03-2016, 02:34
Чтобы закрыть тему манифеста
http://svn.7zsfx.info/diff.php?repname=7zSfx&path=%2Fbranches%2F1.7.0-develop%2F7zSfxMod%2Fsources%2Fres%2Fmanifest32.xml&rev=128
Виновником был отсутствующий "processorArchitecture". Почему это не работало только на WindowsXP без сервиспака? Предположу только, что т.к. манифесты появились именно в ХР, просто было сыровато.
2) По манифесту там ещё правильней добавить шапку
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> »
http://svn.7zsfx.info/filedetails.php?repname=7zSfx&path=%2Fbranches%2F1.7.0-develop%2F7zSfxMod%2Fsources%2Fres%2Fmanifest32.xml
Всё это есть, просто при линковке в ехе, manifestool удаляет ее, как "само собой разумеющееся"

Oleg_Sch
03-04-2016, 01:39
В какой-то мере "юбилейное" обновление:
1.7.0.3900 (http://svn.7zsfx.info/listing.php?repname=7zSfx&path=%2Ftags%2F1.7.0.3900%2Fbin%2F)

1.7 develop (сборка 3900) 01.04.16
# Некоторые изменения при компиляции ресурсов (regist:forum.oszone.net)
* Не работали AutoInstallX (сломалось в 3888) (gora:forum.oszone.net)
* Не подгружался файл конфигурации из больших архивов (gora:forum.oszone.net)
+ Поддержка имен дополнительных файлов конфигурации *.sfx.config.*
+ Флаг 64 'MiscFlags' - отключает использование дополнительных файлов конфигурации
+ Флаг 128 'MiscFlags' - отключает SfxAPI

1.7 develop (сборка 3888) 20.03.16
* Манифест некорректно работал в Windows XP без установленных обновлений (yurecnew:forum.oszone.net)
* Исключение при пустом файле конфигурации (gora:forum.oszone.net)
+ Параметры 'ExtractMaskExclude', 'ExtractMaskInclude' в конфигурационном файле
+ Флаг 32 'MiscFlags' - меняет порядок обработки параметров 'ExtractMaskExclude', 'ExtractMaskInclude'
+ Дополнительная папка *.sfx.api.* в корне архива
+ Дополнительный файл конфигурации *.sfx.config в корне архива


Пока только SVN, за сайт и справку надеюсь на помощь gora

Oleg_Sch
04-04-2016, 07:24
SergeyZV, Никто ничего не удалял:
http://svn.7zsfx.info/listing.php?repname=7zSfx&path=%2Ftags%2F1.6.2.3888%2Fbin%2F

SergeyZV
04-04-2016, 07:28
Oleg_Sch, Здесь (http://7zsfx.info) не нашёл.

P.S. Вот и отвечай после этого оперативно. SergeyZV удалил свой пост. »
Был не прав. Вот и удалил. В любом случае спасибо за оперативность :)

magsood
12-04-2016, 11:29
last Version "7zsd_LZMA2_Dialogs_x64.sfx"?




© OSzone.net 2001-2012