Показать полную графическую версию : [техзадание] Распространение обновления для CHM файла
Petya V4sechkin
07-10-2006, 13:23
Vadikan, Blast
Видимо, свободного времени мало у всех :)
У меня тоже, тем не менее есть мысли и первый результат.
Задачка разделяется на две половины.
1. Некий скрипт, который предназназначен для вас (составителей CHM-справочников). То есть, запускать его будете вы. Он анализирует папки двух проектов (старого и нового) и создает файл (архив), содержащий изменения в новом проекте по сравнению со старым.
2. Скрипт-патчер для конечных пользователей. Декомпилирует старый chm, обновляет его содержимое из diff-файлов (их список может просто браться из текущей папки скрипта по маске "diff_*.7z" с сортировкой по имени) и создает новый chm.
Первую часть сделал, можете протестировать.
http://tools.oszone.net/V4sechkin/CHM/CHM_Env_Test.7z
(размер 4,8 метров).
Это тестовая среда.
Распакуйте содержимое архива в отдельную папку. Там будут подпапки 20060901 ("старый" проект), 20061007 ("новый" проект), непосредственно сам скрипт MakeDiffCHM.cmd (ну и 7za.exe до кучи).
Запускать так:
MakeDiffCHM.cmd 20060901 20061007
или наоборот:
MakeDiffCHM.cmd 20061007 20060901
Первый вариант более нормальный (проект 20061007 содержит несколько "новых" статей, которых нет в 20060901). Но второй тоже попробуйте, чтобы прочувствовать разницу (имитация удаления статей).
После выполнения создается файл типа Diff_20060901_20061007.7z (или Diff_20061007_20060901.7z).
В архиве в папке Files могут содержаться новые файлы и папки, обновленные файлы (не путайте новые с обновленными), а также списки удаленных папок (DelDirs.lst) и файлов (DelFiles.lst), если таковые имеются.
Осталось дело за малым, реализовать подзадачу номер два (патчер для пользователя). Это будет не сложнее, чем первая.
Жду вашей реакции, если вы еще не потеряли к этому интерес.
Petya V4sechkin
07-10-2006, 20:56
Vadikan, Blast
В продолжение к предыдущему посту, часть вторая.
Тестовая среда номер 2:
http://tools.oszone.net/V4sechkin/CHM/CHM_Patch_Test.7z
(размер 5,9 метров).
Исходный патчер состоит из папки Bin (содержащей 7za.exe, hhc.exe, hha.dll) и скрипта UpdateCHM.cmd.
Дальше все просто - в папку со скриптом копируется "старый" chm-файл (предположим, club0.9.chm) и обновление (одно или несколько, сортироваться будут по имени).
Запускается скрипт. В ходе работы он создает папку New, если все пройдет удачно, в ней окажется "новый" chm-файл.
Проверяйте.
Petya V4sechkin
08-10-2006, 11:41
Vadikan, Blast
Продолжаю монолог :) Вернее, заканчиваю.
В первой подзадаче (см. пост 21) мне не совсем понравилось, что файлы сравниваются по дате. Это не всегда надежно, поэтому переделал скрипт. Теперь файлы сравниваются по содержимому (FC /B).
http://tools.oszone.net/V4sechkin/CHM/MakeDiffCHM.cmd
P. S. Забыл сказать, в полных путях не должно быть русских букв и спецсимволов (типа восклицательного знака). Скрипт MakeDiffCHM.cmd должен находиться на одном уровне с папками проектов, т. е. именно так, как сделано в архиве CHM_Env_Test.7z.
Petya V4sechkin
Нет слов... серьезно, это даже больше чем я хотел изначально!
Спасибо огромное за проделанную работу, я даже почти разобрался что к чему, осталось подготовить обновленную версию chm (я хочу упростить структуру каталогов) и буду выпускать в мир.
Еще раз спасибо.
"Я тебя поцелую.. потом.. если захочешь" © :)
Petya V4sechkin
PROFESSIONAL :) ептить...
Petya V4sechkin
08-10-2006, 19:16
Blast
Еще одно ограничение - полагаю, скрипты выполняются только в более-менее современных операционках: Win 2000, XP или старше. Там расширенный синтаксис используется, на 98-х скорее всего не прокатит (надо проверять).
И еще один момент :)
У некоторых "особо продвинутых" людей настолько потвиканная и пропатченая (под Висту) система, что cmd-скрипты выполняются частично :) Я с такими примерами сталкивался (слава богу, нечасто).
Конечно, standalone exe-шник был бы предпочтительнее (вместо cmd), но на данном этапе (жизни) мне больше нравятся именно скрипты. За последнее время привык.
P. S. И спасибо на добром слове :)
Petya V4sechkin
ок, спасибо за упреждение, в принципе несложно будет указать, что апдейт работает только на NT-системах от 2k начиная
ну.. неработоспособность чего бы то ни было у "особо продвинутых" людей это больше проблема этих самых "особо продвинутых" :) - опять же несложно указать, что при невозможности применения апдейта по тем или иным причинам всегда можно скачать полную свежую версию ;) И спасибо на добром слове да нет, это тебе спасибо за работу
Слетела подписка на тему почему-то...
Petya V4sechkin
Большое спасибо! :up: Видимо, свободного времени мало у всех :)Я не сомневался, что ты можешь это реализовать, но надеялся на помощь остальных участников ;-) Я протестирую это дело на учебнике - возможно к его обновлениям тоже такую схему применим.
Слетела подписка на тему почему-то... после применения быстрого редактирования слетает :(
Petya V4sechkin
09-10-2006, 21:04
Petya V4sechkin
Забыл сказать, в полных путях не должно быть русских букв и спецсимволов (типа восклицательного знака).Как показал тест, это ограничение только для MakeDiffCHM.cmd
Скрипт для конечного пользователя UpdateCHM.cmd этой проблеме не подвержен (проверьте сами, на всякий случай).
Vadikan, Blast
Наверное, я щас глупую весчь скажу :)
Конечно, вы уже посмотрели содержимое скриптов и обратили внимание, например, на то, что MakeDiffCHM.cmd в ходе работы создает временную папку Diff в текущей папке. А перед тем, как создать, удаляет ее без вопросов (если она существовала).
Аналогичная ситуация с UpdateCHM.cmd и папкой New (куда в итоге помещается новый chm-файл).
Petya V4sechkin
Я протестировал. Все работает, как заявлено :up: Очень удобно!Как показал тест, это ограничение только для MakeDiffCHM.cmd
Скрипт для конечного пользователя UpdateCHM.cmd этой проблеме не подвержен (проверьте сами, на всякий случай).К сожалению, получил ошибку
Компиляция:
HHC5010: Error: Cannot open "e:\Tools\CHM Updater\╧юы№чютрЄхы№\New\Decompile\club.chm". Compilation stopped. Unable to open New\Decompile\club.hhp.Ошибка при компиляции.
Для продолжения нажмите любую клавишу . . . когда сменил имя папки с User на Пользователь. XP SP2, MUI, русская локаль.
Это ограничение накладывается hh, как я понимаю - она кириллицу в путях не признает?
Конечно, вы уже посмотрели содержимое скриптов и обратили внимание, например, на то, что MakeDiffCHM.cmd в ходе работы создает временную папку Diff в текущей папке. А перед тем, как создать, удаляет ее без вопросов (если она существовала).Я на это обратил внимание исключительно визуально. Если бы я умел писать такие скрипты, то тему бы эту не создавал. Может они тебе после апдейтпака легкими кажутся? :)
Petya V4sechkin
13-10-2006, 12:45
Vadikan
Это ограничение накладывается hh, как я понимаю - она кириллицу в путях не признает?Спасибо за проверку.
Да, в данном случае это проблема hhc.exe.
Ему честно передается параметр типа "New\Decompile\club.hhp" (имя с относительным путем), а оно при попытке преобразовать в абсолютный путь (зачем ему это, непонятно) коверкает русские буквы.
Я на это обратил внимание исключительно визуально. Если бы я умел писать такие скрипты, то тему бы эту не создавал. Может они тебе после апдейтпака легкими кажутся? :)В принципе, скрипты получились довольно компактные, но с MakeDiffCHM.cmd пришлось поломать голову, там такие зубодробительные конструкции типа:
Set V=!V:%CD%\%P2%\=!
(похоже на какие-то страшные ругательства :)
похоже на какие-то страшные ругательства заклинание какое-то :)
Я уже говорил, в принципе не сложно будет обратить внимание в описании апдейта на сайте, что пути с кириллическими символами не поддерживаются
Petya V4sechkin
13-10-2006, 17:59
Надо бы еще на разных операционках проверить UpdateCHM.cmd (на 2000, на висте).
Petya V4sechkin
Надо бы еще на разных операционках проверить UpdateCHM.cmd (на 2000Это я могу на работе проверить.
Вообще, проблема с русскими именами в путях может стать весьма распространной для тех, кто работает в русской Windows и хранит файлы в профиле - имя пользователя вполне может оказаться кириллическим.
А ты keytools не смотрел? Может там нет такой проблемы?
Petya V4sechkin
13-10-2006, 21:55
Vadikan
Посмотрел keytools, но там только GUI.
Из командной строки можно использовать KeyHH.exe, но оно не предназначено для компиляции/декомпиляции (насколько я понял).
Petya V4sechkin
14-10-2006, 14:44
Vadikan
Вот, попробовал косметическое изменение - вызов hhc.exe в обрамлении chcp, проверь плиз:
http://tools.oszone.net/V4sechkin/CHM/UpdateCHM.cmd
Не уверен, что это поможет.
У меня с русскими путями патчер работает даже в первом варианте (без chcp), а у тебя почему-то нет :)
Загадка природы, ведь hhc.exe один и тот же...
Petya V4sechkin
Да, я тоже посмотрел keytools. Keyhh даже декомпилировать не может, хотя авторы пишут KeyHH provides all of the functionality of HH.EXE http://tools.oszone.net/V4sechkin/CHM/UpdateCHM.cmd
Не уверен, что это поможетСначала не помогло. Тогда я полез еще раз в региональные настройки. У меня в Стандарты и форматы английский язык стоит. Поменял на русский и все заработало, включая первый вариант файла. В принципе, я с этим раньше сталкивался, правда в гуи только - SmallCD Writer, например, в меню кракозябры показывает, пока стандарты на русские не сменишь. Еще какие-то программы попадались. Меня это вообще-то раздражает, но процент таких пользователей среди нашей аудитории, скорее всего, невелик. Можно в конце концов в скрипт вставить предупреждение.
Можно в конце концов в скрипт вставить предупреждение.Или автоматически сменить стандарты и форматы на русские, а потом на исходный язык (на время работы скрипта, если язык изначально отличался от русского)...
Petya V4sechkin
15-10-2006, 09:43
Vadikan, simplix
Предлагаю с этим не париться и согласиться с Blast'ом (все равно внутрь hhc.exe мы залезть не сможем):
в принципе не сложно будет обратить внимание в описании апдейта на сайте, что пути с кириллическими символами не поддерживаются
Обновил слегка UpdateCHM.cmd (добавил забытый контроль ошибок при распаковке обновлений).
http://tools.oszone.net/V4sechkin/CHM/UpdateCHM.cmd
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC