Closed tormozit closed 3 years ago
Сейчас нет такой функциональности как подмена контрольной суммы. Можно придумать что-нибудь вроде -refresh
. Ты уверен, что там контрольная сумма, а не тупо порядковый номер версии?
Вполне возможно что там просто новый уникальный GUID просто генерят каждый раз. Считать контрольную сумму - наверное лишние затраты. Я в формате и внутренней кухне не разбирался так глубоко.
Принял. Попробую поковырять сегодня.
Возможно доработка v8unpack тут и не потребуется и достаточно будет где то грубой заменой/очисткой/удалением текста обойтись. Если нужен пример для тестирования, то вечером сделаю.
ну в теории, если ты делаешь -unpack
, а не -parse
, то можно попробовать взять FileHeader
и поменять там байты с 8-го по 11-й - это третье 32-битное слово, которое в теории отвечает за версию контейнера. Надо проверить, давно не ковырял.
Изменение корневого FileHeader не сработало. Пробовал менять в нем все байты, кроме первых 4-х. Вложенный FileHeader тоже пробовал менять.
Открыл эту внешнюю обработку в конфигураторе и записал ее не изменяя содержимого. Затем провел бинарное сравнение в распакованном виде.
Все файлы с расширением "header" изменились одинаковым образом
Попробовал изменить те же байты в них. Не помогло.
Файлы с расширением "data" ожидаемо изменились по-разному
А вот файлы FileHeader не изменились.
ну, в .header
там тупо дата создания и дата модификации, которые для EPF всегда одинаковы, насколько я знаю. Возможно, ключ к разгадке в файле versons
Подмена версий в файле 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}
Подмена версий в файле versions.data.und помогла. В нем чередуются имена файлов (они в кавычках) и их UID версий. Надо каждый раз туда вписывать новые UID.
Подскажите, это уже в данном проекте реализовано или это нужно самостоятельно делать?
Я не вносил изменений в этот проект.
Готовый код правильной запаковки можно посмотреть в ИР в Обработка.ирПлатформа.СформироватьВнешнююОбработку() http://devtool1c.ucoz.ru/
Реализовал переупаковку внешних обработок в своей разработке Менеджер внешних обработок. При изменении обработки, она переупаковывается с изменением УИДов. После этого залипаний обработок в кэше нет.
В 8.3.11 изменили кэширование метаданных внешних обработок на клиенте. Теперь если имя файла не изменилось и не изменились внутренние контрольные суммы, то изменения в файле игнорируются, т.е. используются метаданные из кэша. А у меня в консоли кода многократно обновляется файл внешней обработки путем - Распаковал внешнюю обработку, подменил модуль, запаковал. При этом не меняются контрольные суммы и потому повторное создание объекта внешней обработки на клиенте из того же имени файла использует метаданные от первого в сеансе создания внешней обработки.
Как мне изменить/сбросить эти контрольные суммы? Упаковка выглядит так