e8tools / v8unpack

gcc port
Mozilla Public License 2.0
73 stars 24 forks source link

Распаковал внешнюю обработку, подменил модуль, запаковал. Но в кэше клиента она не обновляется. #69

Closed tormozit closed 3 years ago

tormozit commented 3 years ago

В 8.3.11 изменили кэширование метаданных внешних обработок на клиенте. Теперь если имя файла не изменилось и не изменились внутренние контрольные суммы, то изменения в файле игнорируются, т.е. используются метаданные из кэша. А у меня в консоли кода многократно обновляется файл внешней обработки путем - Распаковал внешнюю обработку, подменил модуль, запаковал. При этом не меняются контрольные суммы и потому повторное создание объекта внешней обработки на клиенте из того же имени файла использует метаданные от первого в сеансе создания внешней обработки.

Как мне изменить/сбросить эти контрольные суммы? Упаковка выглядит так

    ТекстовыйДокумент = Новый ТекстовыйДокумент;
    ТекстовыйДокумент.УстановитьТекст("
    |FOR /D %%I IN (*.unp) DO " + ИмяФайлаПакера + " -pack    %%I %%~nI
    |FOR    %%I IN (*.und) DO " + ИмяФайлаПакера + " -deflate %%I %%~nI
    |" + ИмяФайлаПакера + " -pack .\ %1");
dmpas commented 3 years ago

Сейчас нет такой функциональности как подмена контрольной суммы. Можно придумать что-нибудь вроде -refresh. Ты уверен, что там контрольная сумма, а не тупо порядковый номер версии?

tormozit commented 3 years ago

Вполне возможно что там просто новый уникальный GUID просто генерят каждый раз. Считать контрольную сумму - наверное лишние затраты. Я в формате и внутренней кухне не разбирался так глубоко.

dmpas commented 3 years ago

Принял. Попробую поковырять сегодня.

tormozit commented 3 years ago

Возможно доработка v8unpack тут и не потребуется и достаточно будет где то грубой заменой/очисткой/удалением текста обойтись. Если нужен пример для тестирования, то вечером сделаю.

dmpas commented 3 years ago

ну в теории, если ты делаешь -unpack, а не -parse, то можно попробовать взять FileHeader и поменять там байты с 8-го по 11-й - это третье 32-битное слово, которое в теории отвечает за версию контейнера. Надо проверить, давно не ковырял.

tormozit commented 3 years ago

Изменение корневого FileHeader не сработало. Пробовал менять в нем все байты, кроме первых 4-х. Вложенный FileHeader тоже пробовал менять.

tormozit commented 3 years ago

Открыл эту внешнюю обработку в конфигураторе и записал ее не изменяя содержимого. Затем провел бинарное сравнение в распакованном виде.

Все файлы с расширением "header" изменились одинаковым образом

изображение

изображение

изображение

Попробовал изменить те же байты в них. Не помогло.

Файлы с расширением "data" ожидаемо изменились по-разному

изображение

изображение

А вот файлы FileHeader не изменились.

dmpas commented 3 years ago

ну, в .header там тупо дата создания и дата модификации, которые для EPF всегда одинаковы, насколько я знаю. Возможно, ключ к разгадке в файле versons

tormozit commented 3 years ago

Подмена версий в файле versions.data.und помогла. В нем чередуются имена файлов (они в кавычках) и их UID версий. Надо каждый раз туда вписывать новые UID. Пример содержимого файла:

{1,10,"",be2a2cdb-e0d3-40aa-8837-c6987b0828fe,"1ad4dbd4-e136-4202-8121-02c33ad2af45",02e213f7-4fff-429e-97a1-31f8137f99ff,"1ad4dbd4-e136-4202-8121-02c33ad2af45.0",3cfd9268-6a9d-4f97-8577-f262f65829b8,"4eb1cc18-835d-4f8c-a120-3f9d886d75d4",c7950d36-870d-4c45-9764-f0e1c9b0b223,"902f74d3-f929-4b0f-8719-4cbb655891aa",4a920c8c-5856-4a59-a6c4-577c98e5b4d8,"902f74d3-f929-4b0f-8719-4cbb655891aa.0",66e2cc6e-acd7-4c3d-b2a8-9174bca1b3e5,"copyinfo",a80c4c40-c780-43ff-85b5-d41059921474,"root",5428fef5-8176-4f62-9054-2b4ee42da941,"version",6f4a1975-2f57-4c08-82e1-9b8c1b66260b,"versions",66afd698-4895-4c7a-88a0-2df433ef7536}

Murenysh commented 1 year ago

Подмена версий в файле versions.data.und помогла. В нем чередуются имена файлов (они в кавычках) и их UID версий. Надо каждый раз туда вписывать новые UID.

Подскажите, это уже в данном проекте реализовано или это нужно самостоятельно делать?

tormozit commented 1 year ago

Я не вносил изменений в этот проект.

tormozit commented 1 year ago

Готовый код правильной запаковки можно посмотреть в ИР в Обработка.ирПлатформа.СформироватьВнешнююОбработку() http://devtool1c.ucoz.ru/

Serg2000Mr commented 1 year ago

Реализовал переупаковку внешних обработок в своей разработке Менеджер внешних обработок. При изменении обработки, она переупаковывается с изменением УИДов. После этого залипаний обработок в кэше нет.