Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Наборы обновлений для Windows XP/2003/Windows 7 (http://forum.oszone.net/forumdisplay.php?f=62)
-   -   [техзадание] Распространение обновления для CHM файла (http://forum.oszone.net/showthread.php?t=71926)

Vadikan 26-09-2006 08:31 489612

[техзадание] Распространение обновления для CHM файла
 
Доброго времени суток!

Возможно, тема не совсем соответствует данному форуму, но я его выбрал намеренно. Во-первых, речь все таки об обновлении, а во-вторых - здесь наиболее квалифицированная аудитория для решения подобной задачи :) Так что прошу модераторов отнестись с пониманием, а участиков - помочь в решении поставленной задачи. К делу!

Общая информация

Речь идет о CHM файле, в котором собраны статьи клуба переводчиков OSZone.net (ссылка в подписи). Размер файла пока невелик, но расти он будет достаточно быстро - рано или поздно возникнет ситуация, при которой посетители могут не захотеть загружать файл весом в 15-20 мб ради 5 новых статей. В сязи с этим возникла идея выпуска ежемесячных обновлений для CHM файла. Другими словами, посетитель загружает базовый файл, а впоследствии загружает только обновления небольшого размера. Безусловно, полный файл также будет предлагаться для загрузки.

Задача

Нужно претворить в жизнь следующую идею. Посетитель загружает обновление, запускает его, указывает папку, где находится базовый файл и по окончании процесса обновления получает новый CHM файл. Очень желательно использовать для решения задачи свободное или бесплатное ПО.

Примерный алгоритм действий

Очевидно, для достижения поставленной задачи необходимо следующее
  1. Декомпилировать имеющийся CHM
  2. Скопировать файлы обновления в папку, где находятся извлеченные из CHM файлы
  3. Скомпилировать CHM заново

Дополнительная информация

Безусловно, необходимо будет выполнить декомпиляцию CHM из командной строки. Это можно осуществить следующим образом:
Код:

HH.EXE -decompile D:/xTemp/decompile-folder C:/xTemp/XMLconvert.chm
Компилируется файл так:
Код:

hhc foobar.hhp
HTMLHelp command-line

Кроме того, нужно предусмотреть возможность возникновения ситуации, в которой пользователь укажет неверный путь к CHM файлу (а также прочие отклонения от алгоритма).

Просьба
Во-первых, нужно оценить жизнеспособность идеи. Не исключено, что она неудачна или просто неосуществима.

Во-вторых, в силу катастрофического недостатка свободного времени, я не могу уделить решению данной задачи достаточно внимания. Я буду очень признателен тем участникам конференции, которые возьмут на себя труд по реализации проекта и подготовят необходимый код (пакетные файлы, конфигурационные файлы 7-zip и т.д. и т.п.).

Я постараюсь ответить на любые вопросы, связанные с проектом. Составлением CHM файла занимается Blast, который также будет участвовать в обсуждении.

Спасибо за внимание!

serotka 26-09-2006 14:11 489768

Моё мнение, что если юзеру нужно, то он скачает любого рамера файл. А вообще я думаю, что то задумка хороша, но не получится, что при обнове полезут разные баги.

Vadikan 26-09-2006 19:03 489937

serotka
Цитата:

вообще я думаю, что то задумка хороша, но не получится, что при обнове полезут разные баги.
Какие баги, например?

Boa Soft 26-09-2006 20:48 489986

Vadikan

В принципе, пакет для компиляции CHM распрастраняется MS свободно.

Алгоритм может быть простым. Декомпиляция в папку, добавление изменений и нового сценария пректа, компиляция.

Если могут возникнуть проблемы с распрастранением утилиты от MS, то можно просто дать ссылку на закачку. Около 1 mb.

А на счет багов - есть md5 для проверки верности исходных файлов перед компиляцией.

Blast 26-09-2006 20:57 489992

Boa Soft
ну в принципе компиляция/декомпиляция будет ведь производиться через hh.exe который присутствует в системе по умолчанию (Windows XP), то есть по идее сложностей с этим не должно возникнуть.
Вопрос скорее в том как и чем проконтролировать наличие исходного файла chm в указанной пользователем директории, ну и потом проверка нормально ли файл был декомпилирован (проверка по кол-ву файлов/каталогов) и компиляция в ту же папку на которую указывал пользователь с перезаписью лежащего там исходного chm
если это осуществимо конечно...

Boa Soft 26-09-2006 21:18 490000

Blast
Цитата:

Вопрос скорее в том как и чем проконтролировать наличие исходного файла chm в указанной пользователем директории, ну и потом проверка нормально ли файл был декомпилирован (проверка по кол-ву файлов/каталогов) и компиляция в ту же папку на которую указывал пользователь с перезаписью лежащего там исходного chm
если это осуществимо конечно...
IF [NOT] EXIST имя_файла команда

Dir, Findstr

Можно и утилитку написать. Для общего блага нежалко и времени потратить.

Vadikan 26-09-2006 23:55 490058

Boa Soft
Да в общем-то команды все известны, нужно просто все вместе сложить :)

Кстати, есть еще такой момент. Допустим, к базовому файлу уже выпущено N обновлений, каждое из которых можно скачать по отдельности и обновить им CHM. Пользователь их все загружает, и что - N раз будет проходить процесс декомпиляции/компиляции? Получается не очень изящно...

Boa Soft 27-09-2006 02:25 490069

Цитата:

Кстати, есть еще такой момент. Допустим, к базовому файлу уже выпущено N обновлений, каждое из которых можно скачать по отдельности и обновить им CHM. Пользователь их все загружает, и что - N раз будет проходить процесс декомпиляции/компиляции? Получается не очень изящно...
Нет, не нужно. Скачать. Распаковать в порядке возрастания в папку. Применить патч. За один проход.

Vadikan 27-09-2006 02:48 490071

Boa Soft
Тогда получается такая картина: обновления будут распространяться в архивах, а утилита/скрипт для обновления не будет входить в их состав, но будут предлагаться для загрузки отдельно. Я правильно понимаю?

Тогда учитывая то, что в каждом обновлении должен находиться файл проекта (*.HHP), на пользователя возлагается задача распаковки архивов в правильном порядке (иначе новый файл проекта может оказаться перезаписан более старым). Тогда уж надо каждое обновление в свою папку распаковывать, но это может усложнить скрипт обновления.

serotka 27-09-2006 07:12 490086

Vadikan
PHP код:

Какие багинапример

При обновлении CHM. Скрипт может испортить CHM, я конечно понимаю, что скрипт будет протестирован, но при многократном обновлении как и в UpdatePack-XPSP2-Rus иногда может появится баг.

Vadikan 27-09-2006 08:02 490095

serotka
Ну на такие баги все можно списать. У некоторых, например, CHM вообще не запускаются :)

Unter 27-09-2006 10:34 490161

Цитата:

Тогда учитывая то, что в каждом обновлении должен находиться файл проекта (*.HHP), на пользователя возлагается задача распаковки архивов в правильном порядке (иначе новый файл проекта может оказаться перезаписан более старым). Тогда уж надо каждое обновление в свою папку распаковывать, но это может усложнить скрипт обновления.
Можно в имени файла проекта указывать идентификационный номер, а скрипт будет его обрабатывать в порядке нумерации.

BeLyI 27-09-2006 15:43 490337

Я думаю надо все статьи разбить на группы по сходной тематике и создать базовый chm с этими группами в содержании. И выпускать обновления по 3-10 статей в зависимости от обстоятельств (размера, схожести и т.д.), файл содержиния не заменять а дополнять. Обновления не должны зависить друг от друга. И в конечном итоге у каждого пользователя на компьютере будет свой файл chm с интересующими только его статьями, без лишних для него статей.
И не плохо было бы такой подход применить к оффлайн версии "Автоматическая установка Windows", потому что статьи из раздела Новичку и некоторых других в принципе не интересуют, а файл chm хотелось бы иметь на компьютере под рукой.

Vovchick1 27-09-2006 17:04 490387

Vadikan
Цитата:

Очевидно, для достижения поставленной задачи необходимо следующее

1. Декомпилировать имеющийся CHM
2. Скопировать файлы обновления в папку, где находятся извлеченные из CHM файлы
3. Скомпилировать CHM заново
Ещё может случиться что при выполнении декоппиляции имеющегося CHM (или копирования файлов обновления в папку), нехватит места на диске!!!! :shuffle:

Vadikan 27-09-2006 17:45 490405

Unter
Цитата:

Можно в имени файла проекта указывать идентификационный номер, а скрипт будет его обрабатывать в порядке нумерации.
Хорошая идея, но я как-то не могу сходу представить ее техническую реализацию.

BeLyI
Цитата:

Я думаю надо все статьи разбить на группы по сходной тематике и создать базовый chm с этими группами в содержании. И выпускать обновления по 3-10 статей в зависимости от обстоятельств (размера, схожести и т.д.), файл содержиния не заменять а дополнять.
Слишком много работы по обслуживанию и созданию CHM файла. Обновления планируется выпускать раз в месяц, а дробить их по тематике и для каждой тематики делать отдельное обновление - это уже черезчур. Однако, если есть желающие этим заниматься - милости прошу :)
Цитата:

И не плохо было бы такой подход применить к оффлайн версии "Автоматическая установка Windows", потому что статьи из раздела Новичку и некоторых других в принципе не интересуют, а файл chm хотелось бы иметь на компьютере под рукой.
Возможно, аналогичная модель будет применена в будущем и к учебнику АУ. Но во-первых, нужно сначала решить задачу с данным CHM, а во-вторых размер учебника АУ относительно невелик и попоплняется он не так уж часто.
Vovchick1
Цитата:

Ещё может случиться что при выполнении декоппиляции имеющегося CHM (или копирования файлов обновления в папку), нехватит места на диске!!!
Да, такое тоже возможно. Можно указать это в системных требованиях ;)

XXXler 27-09-2006 23:16 490523

Vadikan, варианты с полностью автоматическим обновлением (вплоть до скачивания скриптом файлов из инета) рассматриваются?

Vadikan 28-09-2006 19:48 490925

XXXler
Интересная идея, но думаю, что это уже чрезчур :) Это все-таки не программа :) Обновления скорее всего будут размещаться на soft.oszone.net, а не на некой статичной странице. Так что проверить их наличие может быть затруднительно.

Unter 30-09-2006 02:54 491499

Цитата:

Цитата:

Можно в имени файла проекта указывать идентификационный номер, а скрипт будет его обрабатывать в порядке нумерации.
Хорошая идея, но я как-то не могу сходу представить ее техническую реализацию.
Сложность может возникнуть только с определением установленных апдейтов: где хранить информацию в реестре или еще где нибудь, а в обновления можно вкладывать сопроводиловку с которой и будет сравниваться. Это в том случае если все апдейты необходимо обрабатывать в порядке выпуска, а если порядок не важен, то еще проще.
А вообще командный процессор в NT-шках позволяет многое сделать. Я как-то извращался даже на тему сравнения даты файлов с определенной датой. В крайнем случае можно использовать скрипты. Правда я сейчас до конца октября в отпуске, поэтому заходить на форум буду редко.

Petya V4sechkin 30-09-2006 09:21 491535

Vadikan
Собственно, а где hhp-файл? Проект для компиляции?

Vadikan 02-10-2006 04:19 492125

Petya V4sechkin
Сорри, я не предоставил никаких файлов сразу. Вообще, в результате декомпиляции файл проекта не образуется. http://tools.oszone.net/Vadikan/files/chm_stuff.rar (в архиве файл проекта и hhc.exe) HHP-файл имеет формат, аналогичный INI-файлам.

P.S. Помимо файлов проекта каждый раз будут изменяться также club.html (главная страница), Table of Contents.hhc (содержание), club.hpp (файл проекта) и возможно index.hhk (указатель, он пока не сделан).

Petya V4sechkin 07-10-2006 13:23 494715

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 494875

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 494981

Vadikan, Blast
Продолжаю монолог :) Вернее, заканчиваю.

В первой подзадаче (см. пост 21) мне не совсем понравилось, что файлы сравниваются по дате. Это не всегда надежно, поэтому переделал скрипт. Теперь файлы сравниваются по содержимому (FC /B).
http://tools.oszone.net/V4sechkin/CHM/MakeDiffCHM.cmd

P. S. Забыл сказать, в полных путях не должно быть русских букв и спецсимволов (типа восклицательного знака). Скрипт MakeDiffCHM.cmd должен находиться на одном уровне с папками проектов, т. е. именно так, как сделано в архиве CHM_Env_Test.7z.

Blast 08-10-2006 14:52 495043

Petya V4sechkin
Нет слов... серьезно, это даже больше чем я хотел изначально!
Спасибо огромное за проделанную работу, я даже почти разобрался что к чему, осталось подготовить обновленную версию chm (я хочу упростить структуру каталогов) и буду выпускать в мир.
Еще раз спасибо.
"Я тебя поцелую.. потом.. если захочешь" © :)

NRG 08-10-2006 18:57 495113

Petya V4sechkin

PROFESSIONAL :) ептить...

Petya V4sechkin 08-10-2006 19:16 495121

Blast
Еще одно ограничение - полагаю, скрипты выполняются только в более-менее современных операционках: Win 2000, XP или старше. Там расширенный синтаксис используется, на 98-х скорее всего не прокатит (надо проверять).

И еще один момент :)
У некоторых "особо продвинутых" людей настолько потвиканная и пропатченая (под Висту) система, что cmd-скрипты выполняются частично :) Я с такими примерами сталкивался (слава богу, нечасто).

Конечно, standalone exe-шник был бы предпочтительнее (вместо cmd), но на данном этапе (жизни) мне больше нравятся именно скрипты. За последнее время привык.

P. S. И спасибо на добром слове :)

Blast 08-10-2006 19:22 495123

Petya V4sechkin
ок, спасибо за упреждение, в принципе несложно будет указать, что апдейт работает только на NT-системах от 2k начиная
ну.. неработоспособность чего бы то ни было у "особо продвинутых" людей это больше проблема этих самых "особо продвинутых" :) - опять же несложно указать, что при невозможности применения апдейта по тем или иным причинам всегда можно скачать полную свежую версию ;)
Цитата:

И спасибо на добром слове
да нет, это тебе спасибо за работу

Vadikan 09-10-2006 11:11 495334

Слетела подписка на тему почему-то...

Petya V4sechkin
Большое спасибо! :up:
Цитата:

Видимо, свободного времени мало у всех :)
Я не сомневался, что ты можешь это реализовать, но надеялся на помощь остальных участников ;-) Я протестирую это дело на учебнике - возможно к его обновлениям тоже такую схему применим.

Blast 09-10-2006 11:41 495353

Цитата:

Цитата Vadikan
Слетела подписка на тему почему-то...

после применения быстрого редактирования слетает :(

Petya V4sechkin 09-10-2006 21:04 495532

Petya V4sechkin
Цитата:

Забыл сказать, в полных путях не должно быть русских букв и спецсимволов (типа восклицательного знака).
Как показал тест, это ограничение только для MakeDiffCHM.cmd
Скрипт для конечного пользователя UpdateCHM.cmd этой проблеме не подвержен (проверьте сами, на всякий случай).

Vadikan, Blast
Наверное, я щас глупую весчь скажу :)
Конечно, вы уже посмотрели содержимое скриптов и обратили внимание, например, на то, что MakeDiffCHM.cmd в ходе работы создает временную папку Diff в текущей папке. А перед тем, как создать, удаляет ее без вопросов (если она существовала).
Аналогичная ситуация с UpdateCHM.cmd и папкой New (куда в итоге помещается новый chm-файл).

Vadikan 13-10-2006 12:03 497189

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 497212

Vadikan
Цитата:

Это ограничение накладывается hh, как я понимаю - она кириллицу в путях не признает?
Спасибо за проверку.
Да, в данном случае это проблема hhc.exe.
Ему честно передается параметр типа "New\Decompile\club.hhp" (имя с относительным путем), а оно при попытке преобразовать в абсолютный путь (зачем ему это, непонятно) коверкает русские буквы.

Цитата:

Я на это обратил внимание исключительно визуально. Если бы я умел писать такие скрипты, то тему бы эту не создавал. Может они тебе после апдейтпака легкими кажутся? :)
В принципе, скрипты получились довольно компактные, но с MakeDiffCHM.cmd пришлось поломать голову, там такие зубодробительные конструкции типа:
Set V=!V:%CD%\%P2%\=!
(похоже на какие-то страшные ругательства :)

Blast 13-10-2006 15:58 497280

Цитата:

похоже на какие-то страшные ругательства
заклинание какое-то :)

Я уже говорил, в принципе не сложно будет обратить внимание в описании апдейта на сайте, что пути с кириллическими символами не поддерживаются

Petya V4sechkin 13-10-2006 17:59 497313

Надо бы еще на разных операционках проверить UpdateCHM.cmd (на 2000, на висте).

Vadikan 13-10-2006 20:46 497369

Petya V4sechkin
Цитата:

Надо бы еще на разных операционках проверить UpdateCHM.cmd (на 2000
Это я могу на работе проверить.

Вообще, проблема с русскими именами в путях может стать весьма распространной для тех, кто работает в русской Windows и хранит файлы в профиле - имя пользователя вполне может оказаться кириллическим.

А ты keytools не смотрел? Может там нет такой проблемы?

Petya V4sechkin 13-10-2006 21:55 497396

Vadikan
Посмотрел keytools, но там только GUI.
Из командной строки можно использовать KeyHH.exe, но оно не предназначено для компиляции/декомпиляции (насколько я понял).

Petya V4sechkin 14-10-2006 14:44 497642

Vadikan
Вот, попробовал косметическое изменение - вызов hhc.exe в обрамлении chcp, проверь плиз:
http://tools.oszone.net/V4sechkin/CHM/UpdateCHM.cmd
Не уверен, что это поможет.

У меня с русскими путями патчер работает даже в первом варианте (без chcp), а у тебя почему-то нет :)
Загадка природы, ведь hhc.exe один и тот же...

Vadikan 14-10-2006 20:31 497805

Petya V4sechkin
Да, я тоже посмотрел keytools. Keyhh даже декомпилировать не может, хотя авторы пишут
Цитата:

KeyHH provides all of the functionality of HH.EXE
Цитата:

http://tools.oszone.net/V4sechkin/CHM/UpdateCHM.cmd
Не уверен, что это поможет
Сначала не помогло. Тогда я полез еще раз в региональные настройки. У меня в Стандарты и форматы английский язык стоит. Поменял на русский и все заработало, включая первый вариант файла. В принципе, я с этим раньше сталкивался, правда в гуи только - SmallCD Writer, например, в меню кракозябры показывает, пока стандарты на русские не сменишь. Еще какие-то программы попадались. Меня это вообще-то раздражает, но процент таких пользователей среди нашей аудитории, скорее всего, невелик. Можно в конце концов в скрипт вставить предупреждение.

simplix 14-10-2006 22:25 497843

Цитата:

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

Petya V4sechkin 15-10-2006 09:43 497952

Vadikan, simplix
Предлагаю с этим не париться и согласиться с Blast'ом (все равно внутрь hhc.exe мы залезть не сможем):
Цитата:

в принципе не сложно будет обратить внимание в описании апдейта на сайте, что пути с кириллическими символами не поддерживаются
Обновил слегка UpdateCHM.cmd (добавил забытый контроль ошибок при распаковке обновлений).
http://tools.oszone.net/V4sechkin/CHM/UpdateCHM.cmd

Petya V4sechkin 16-10-2006 17:30 498625

Душераздирающая история:
http://forum.oszone.net/post-498610.html#post498504

Упростил UpdateCHM.cmd, убрав внешнюю команду XCopy (других внешних команд в скрипте нет).
http://tools.oszone.net/V4sechkin/CHM/UpdateCHM.cmd

vserd 03-01-2007 18:09 531555

Vadikan
А если пойти по другому пути?
0. Индекс
1. Первый Базовый файл. Например лимит в 3 мега.
2. Второй Базовый файл.
3. Третий Базовый файл.
х. текущий файл обновления.

Идея втом, что мы заменяем индекс и добавляем статьи как новые так и измененные в новый файл.
При добавлении все просто, просто - замена в индексе, при изменении статьи сложнее, нужно будет зарубить ссылку на старую версиию, и перенаправить на новую. Еще одна проблемка, это ссылки из других статей на изменяемую.

P.S. сильно не пинай если что, возможностей chm не знаю, просто идею генерирую.

P.P.S. 2 ALL
Народ, вы чето углубились в дебри. Я конечно понимаю, что большинство unattended сборшиков в некоторой степени программеры, но не настолько же.... :(
Хотя я и сам программер, но скачивать и чего то там декомпилировать/компилировать нехочу... По работе этого хватает...

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

Кстати, а кто нибудь проверял как ведет себя комплект когда есть русские буквы в %Temp%?

APOSTOL 03-01-2007 23:07 531633

Я проверял, давно правда, ещё 11 ноября.
Работал в папке с содержательным названием с пробелами и на кирилике [D:\Н A Д O\Обновление]. Нормально работает. Но совсем не так, как хотелось бы лично мне для обновления "Клуба переводчиков". :(

В том плане, что в простенький CHM - вполне можно впихать обновление.
Но вот ни Индексирование ни Поиск этим способом - не получится.

Дал вагон и маленькую тележку замечаний в почту Vadikan-у, но так на этом пока всё и закончилось. :)

Vadikan 08-01-2007 05:57 533265

Цитата:

Цитата vserd
А если пойти по другому пути?
0. Индекс
1. Первый Базовый файл. Например лимит в 3 мега.
2. Второй Базовый файл.
3. Третий Базовый файл.
х. текущий файл обновления.

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

Цитата:

Цитата APOSTOL
Но вот ни Индексирование ни Поиск этим способом - не получится.

Индекс не работает, если он формируется из спецтегов в страницах - при распаковке они не сохраняются. Но я переделал индекс - теперь он в виде отдельного файла. Поиск у меня тоже работает, кстати. Вообще, у меня все работает, как надо (кроме кириллицы в путях, конечно).
Цитата:

Цитата vserd
Народ, вы чето углубились в дебри. Я конечно понимаю, что большинство unattended сборшиков в некоторой степени программеры, но не настолько же.... :(

Да на самом деле, все очень просто. Для конечного пользователя все сводится к:
1. Загрузке Update Kit. Постоянный набор файлов для произведения всех операций достаточно загрузить один раз. Размер чуть больше 500 кб.
2. Загрузке обновления. В зависимости от количества картинок размер будет варьироваться, конечно. Текст-то жмется хорошо.
3. Запуску пакетного файла из Update Kit (при условии, что файлы пп. 1 и 2 в одной папке с имеющимся chm.

В принципе, все. Не сложнее аддона ;) Специалист же делал :)
Цитата:

Кстати, а кто нибудь проверял как ведет себя комплект когда есть русские буквы в %Temp%?
А Temp там и не участвует - только текущая папка CHM.

Petya V4sechkin
А можно в MakeDiffCHM.cmd условие добавить, чтобы при сравнении старой и новой версии игнорировался файл unattended.oszone.net.chm? Просто в index.hhp путь к результирующему CHM-файлу прописан относительно расположения index.hhp - создается в той же папке -> мешает при сравнивании. Мне кроме IF EXIST ... COPY трудно придумать что-то. Спасибо!

APOSTOL
Загрузи, плиз, текущую версию учебника когда время будет, я тебе на тестирование пришлю все файлы текущего обновления (само оно 33 кб в архиве).

P. S. В этом сообщении я говорю применительно к учебнику по автоустановке, а не к статьями клуба переводчиков.

APOSTOL 08-01-2007 13:47 533397

Цитата:

говорю применительно к учебнику..., а не к статьями... :up:
Vadikan, завтра стащу, встречно задвигая Клуб на ФТП. Шлите апельсины бочками ©

Цитата:

1. Загрузке Update Kit.
А там будут 7za.exe, hhc.exe и hha.dll ?
Что-то на дефолтовой Винде я такого не нашёл, а то, что натаскал "слева" обладает интересным свойством: очень значительной разницей в размерах одноимённо-натасканных файлов. Есть надежда, что именно поэтому я потерял Поиск. Хотелось бы, чтоб ВСЕ работали с одними и теми же файлами Kit.

Вот куда нить поклали-бы его до кучи прям щас... Или я что-то здесь пропустил :spy: ?

А насчёт
Цитата:

когда есть русские буквы в %Temp%?
Сомнительно, что у интересующегося унаттендой, вплоть до желания самостоятельно обновляться, до сих пор эта папка не вЫровнена до корня :)

Petya V4sechkin 08-01-2007 15:07 533429

Vadikan
Цитата:

А можно в MakeDiffCHM.cmd условие добавить, чтобы при сравнении старой и новой версии игнорировался файл unattended.oszone.net.chm? Просто в index.hhp путь к результирующему CHM-файлу прописан относительно расположения index.hhp - создается в той же папке -> мешает при сравнивании.
Готово:
http://tools.oszone.net/V4sechkin/CHM/MakeDiffCHM.cmd
Для универсальности игнорируются все файлы с расширением .chm, ведь вряд ли они могут быть внутри проекта?

P. S. Чего-то команда fc /b перестала мне нравиться - если файлы слишком разные и большие по размеру, сравнение жестко тормозит за счет того, что оно пытается вывести все различия в stdout (или в >nul, не важно). Может, накропаю программку для сравнения, более быстро работающую..

P. P. S. UpdateCHM.cmd тоже чуток обновлен - теперь удаление папки New остается на совести пользователя (чтобы скрипт, не дай бог, не удалил чего-нибудь нужного).

Petya V4sechkin 08-01-2007 15:44 533436

APOSTOL
Вроде бы все достаточно доходчиво описано на 3-ей странице:
http://forum.oszone.net/post-494875-22.html

Update Kit я пока не выкладывал отдельно (только в составе тестовой среды), поскольку сабж не внедрялся.
Если надо - пожалуйста (размер 535 кило).

P. S. Кстати говоря, если где-то существуют файлы hhc.exe, hha.dll версий более свежих, чем 4.74.8702 (из HTML Help Workshop), киньте ссылочку.

APOSTOL 08-01-2007 19:04 533499

Petya V4sechkin, всё доходчиво. :) Vadikan использует меня в качестве тупого ламера для наступания на такие грабли, которые остальные просто не заметят.

Цитата:

Update Kit в составе тестовой среды
Представляешь, как я обрадовался, когда скачал 6 Метров по модему и обнаружил внутри 5.5-Метровый Клуб версии 0.9 :haha:

Vadikan 08-01-2007 20:56 533531

Хотя изначально в теме речь шла о статьях клуба переводчиков, я учебник держал в уме в любом случае. Теперь, когда статьи клуба разбиты на три файла идею vserd надо обдумать, но именно для удобства доступа сразу ко всем файлам из одного индекса. Насчет обновлений я пока не уверен... Слишком много мелких обновлений для разных файлов тоже могут запутать :) Учебник же, по крайней мере, один :)

APOSTOL
Цитата:

Представляешь, как я обрадовался, когда скачал 6 Метров по модему и обнаружил внутри 5.5-Метровый Клуб версии
Именно поэтому я и сказал, что выложу сам :)
Цитата:

Vadikan использует меня в качестве тупого ламера для наступания на такие грабли, которые остальные просто не заметят.
Эээ... я никогда не думал о такой форумулировке, однако проблемы неопытных пользователей тебе почему-то понятнее, чем мне :)
Цитата:

Сомнительно, что у интересующегося унаттендой, вплоть до желания самостоятельно обновляться, до сих пор эта папка не вЫровнена до корня
Я, например, не меняю значение этой переменной :)

Petya V4sechkin
Цитата:

Готово:
http://tools.oszone.net/V4sechkin/CHM/MakeDiffCHM.cmd
Для универсальности игнорируются все файлы с расширением .chm, ведь вряд ли они могут быть внутри проекта?
Спасибо! Я протестирую попозже. Конечно, там в проекте .chm файлов быть не должно.
Цитата:

. Чего-то команда fc /b перестала мне нравиться - если файлы слишком разные и большие по размеру, сравнение жестко тормозит за счет того, что оно пытается вывести все различия в stdout (или в >nul, не важно). Может, накропаю программку для сравнения, более быстро работающую..
Думаю, что в этом нет особой нбх. Типичные изменения в учебнике помимо файлов нбх для компиляции затрагивают несколько html-файлов - лог обновлений и главная страница всегда, плюс несколько других страниц. Размер файлов не очень большой.

APOSTOL 08-01-2007 23:54 533582

- Хуже, чем просто наступить на грабли - это наступить на детские грабли...
Цитата:

до сих пор эта папка не вЫровнена до корня
Я, например, не меняю значение этой переменной
Дык у тебя и нет там в пути русских букв :P

В общем так: на сейчас ОЧЕНЬ важно, утановлен ли в системе этот самый HTML Help Workshop...
У вас у всех он установлен :haha:

Винды проверял две: русская и английская, обе SP2. Естественно, обе - левые. На английской HTML Help Workshop никогда не ставился.

При его отсутствии ни фига нормально не работает, наверняка потому, что
Цитата:

Компиляция:
HHC6003: Error: The file Itircl.dll has not been registered correctly.
Microsoft HTML Help Compiler 4.74.8702
Попытки регистрации regsvr32 Itircl.dll проходит успешно (в Винде есть такая в System32), но результат - не меняется. Пытался подсунуть саму эту DLL во все папки поближе - по барабану.
В результате файл таки-ДА, пересобирается, но Поиск отсутствует, а в Индексе не суммируются совпадающие статьи и он не складывается по алфавиту.

При установке HTML Help Workshop - всё работает просто замечательно. Работает ВСЁ и правильно. В папке с любым количеством пробелов и русских букв.

При деинсталляции HTML Help Workshop получаем обратно первый вариант, один-в-один. :(

Во-вторых: в пакете от Petya V4sechkin, который "размер 535 кило", файлы с размерами

7za.exe - 466
hha.dll - 819
hhc.exe - 51

у меня есть такие же файлы, тех же версий (в свойствах файла), с датой создания на час позже, но размеры

7za.exe - 461
hha.dll - 420
hhc.exe - 27

правда, плющатся в 7-zip гораздо хуже, 598 получается. Работают - одинаково. Где тут фишка - не понял.

Vadikan 09-01-2007 04:47 533608

APOSTOL
Цитата:

Дык у тебя и нет там в пути русских букв :P
Теперь есть, я в русской Висте работаю ;) Хотя нет, имя пользователя все равно латиницей. И тут вообще другая папка по умолчанию - C:\Users\<Username>\Appdata\Local\Temp
Цитата:

В общем так: на сейчас ОЧЕНЬ важно, утановлен ли в системе этот самый HTML Help Workshop...
Хороший и главное своевременный вопрос :) Я как-то на работе его ставил (по дефолту в Program Files), копировал папку в другое место, корректно удалял приложение, и после этого он из другого места работать правильно не хотел. Библиотеку ту я тоже регистрировал и подсовывал ему в папку - ничего не получалось, не в ней дело видимо. Копирование папки обратно в Program Files восстанавливало нормальную работу.
Цитата:

В результате файл таки-ДА, пересобирается, но Поиск отсутствует, а в Индексе не суммируются совпадающие статьи и он не складывается по алфавиту.
Помнишь мы с тобой разбирались, почему у меня файл меньше твоего был? Поиск не компилировался у меня вот после тех ^^ экспериментов. Сейчас я повторил эксперимент - при отсутствии Workshop в Program Files компиляция идет с ошибкой и файл создается без поиска (индекс кстати работает, но это наверное потому, что спецтеги до сих пор в теле страниц прописаны).

Process Monitor'ом сходу ничего не вычислил...

APOSTOL 09-01-2007 08:55 533656

Цитата:

копировал папку в другое место
Это я очень давно пробовал - нельзя ли его НЕ инсталлировать, он работать отказался. Плюнул.
Вот htm2chm 3.0 - портабелен, примерно как WinRAR - только один раз запустить, чтоб прописался в Системе.
Цитата:

Process Monitor'ом сходу
Ну, тут я естчё меньше понимаю. И на кого теперича взвалим данный пункт ?

Petya V4sechkin 09-01-2007 13:08 533759

А я почему-то думал, что hha.dll достаточно :( Почему я так думал, сам не знаю..
Ладно, гугль нам поможет. Как оказалось, itircl.dll вообще ни при чем, дело в itcc.dll.

Вот новый вариант:
http://tools.oszone.net/V4sechkin/CHM/UpdateCHM.7z
(перед компиляцией скрипт копирует itcc.dll в system32 и регистрирует).

APOSTOL 09-01-2007 16:14 533836

Petya V4sechkin, теперь всё работает как надо. Спасибо :)

APOSTOL 27-01-2007 17:07 542214

Petya, а нельзя чуть-чуть доделать MakeDiffCHM.cmd так, чтобы он, используя тот-же набор из такой же своей папки [Bin], сам мог разбирать CHM-ы ?

В смысле:
Я беру папку проекта, в которой есть [Bin] и MakeDiffCHM.cmd (ой, да, и ещё MakeDiffCHM.bat), запёхиваю туда только ДВА *.chm и один *.hhp - а MakeDiffCHM.cmd бы в лоб сравнивал эти два CHM, в порядке, указанном в MakeDiffCHM.bat, с выводом разницы в 7-zip.

Vad мне предложил самостоятельно вставить какую-то магическую формулу
Цитата:

HH.EXE -decompile D:/xTemp/decompile-folder C:/xTemp/XMLconvert.chm
но произвести какие-либо действия сложнее, чем выпучить глаза - я не смог... Я в программинге - ни ПномПень

Petya V4sechkin 27-01-2007 19:53 542296

APOSTOL
Конечно, можно. А надо это кому-нибудь? Вроде бы "заказчиками" изначально выступали Vadikan и Blast.

И вот это:
Цитата:

а MakeDiffCHM.cmd бы в лоб сравнивал эти два CHM, в порядке, указанном в MakeDiffCHM.bat
непонятно.

APOSTOL 27-01-2007 20:16 542308

Цитата:

А надо это кому-нибудь?
(задумчиво чеша репу) наверное только мне - это я сейчас веду CHM Клуба переводчиков... :( - Vadikan не даст соврать.

Цитата:

а MakeDiffCHM.cmd бы в лоб сравнивал эти два CHM, в порядке, указанном в MakeDiffCHM.bat
вот сейчас форма запуска MakeDiffCHM.cmd <папка_старого_проекта> <папка_нового_проекта>, то есть сравниваются ПАПКИ.

Так как у меня в наличии есть и "старый" CHM и "новый" CHM, в которых заведомо нет лишних файлов (а в Папках, из которых я их делаю, какой только лишней фигни не лежит) - я просто пихал оба CHM в Проект, и (гы, врукопашную) разваливал в ПАПКИ. Затем в "новую" подсовывал "новый" *.hhp. Дальше - получалась разница между этими папками. Очень удобно, учитывая что я на этот момент вряд-ли бы уже вспомнил, в каких именно файлах (или рисунках - я некоторые конвертировал для уменьшения размера) старого CHM были произведены изменения.

Вот и спрашиваю: а можно эту рукопашную всунуть внутрь утилиты, потому как сам я это сделать - :patsak: ?

Petya V4sechkin 27-01-2007 21:17 542342

APOSTOL
Цитата:

(задумчиво чеша репу) наверное только мне - это я сейчас веду CHM Клуба переводчиков...
Так бы сразу и сказал :)

Как такой вариант?
MakeDiffCHM2.cmd <старый_chm> <новый_chm> <новый_hhp>

Petya V4sechkin 27-01-2007 21:43 542351

А как тогда задать имя Diff-файла?

APOSTOL 27-01-2007 22:32 542361

MakeDiffCHM.bat с содержанием
Цитата:

MakeDiffCHM2.cmd <старый_chm> <новый_chm>
- Да. При разборке CHM и должны получится те-же папки <папка_старого_проекта> и <папка_нового_проекта>.

Цитата:

<новый_hhp>
- не знаю, а надо-ли ? Лучше схватить тот, который рядом с CHM-файлами в Проекте лежит (с той же проверкой: "а где файл ?" и "а хрен-ли он не один ?"), и перепихнуть его в папку, получившуюся из указанного <новый_chm> - <папка_нового_проекта>.

Имя Diff-файла - из старого принципа - Diff_<старый>_<новый>, которые указаны в MakeDiffCHM.bat (в смысле, с которыми параметрами запускается утилита).

Да, и ещё: а зачем там внутри листинги отличий ? Вроде при обратной сборке UpdateCHM.cmd они участия не принимают ?

Petya V4sechkin 28-01-2007 14:00 542615

APOSTOL
Цитата:

Лучше схватить тот, который рядом с CHM-файлами в Проекте лежит
В каком проекте? Откуда MakeDiffCHM2.cmd будет знать о каких-то проектах, если ему в качестве параметров передаются имена chm-файлов? Или не имена? Кажется, мы говорим о разных вещах.

Цитата:

Имя Diff-файла - из старого принципа - Diff_<старый>_<новый>, которые указаны в MakeDiffCHM.bat (в смысле, с которыми параметрами запускается утилита).
По-прежнему не понимаю, что за MakeDiffCHM.bat.
Что запускается? С какими конкретно параметрами?

Цитата:

Да, и ещё: а зачем там внутри листинги отличий ? Вроде при обратной сборке UpdateCHM.cmd они участия не принимают ?
Какие листинги?

Цитата:

Так как у меня в наличии есть и "старый" CHM и "новый" CHM, в которых заведомо нет лишних файлов (а в Папках, из которых я их делаю, какой только лишней фигни не лежит)
Я думаю, в папках проекта не стоит хранить лишнюю фигню.

Наверное, Вадикан был прав - тебе лучше самому поправить свой MakeDiffCHM.bat.
Декомпиляция делается так:
Код:

Start /Wait hh.exe -decompile <папка_назначения> <chm-файл>
Что тут непонятного? Вроде все понятно.

Petya V4sechkin 28-01-2007 15:43 542660

APOSTOL
А! Кажется, я догадался!
Значит, в каждой папке проекта у тебя лежит скомпилированный chm-файл? И ты хочешь, чтобы MakeDiffCHM2.cmd сравнивал не сами папки, а содержимое chm-файлов?

APOSTOL 28-01-2007 16:16 542669

Как работает MakeDiffCHM.cmd сейчас: (я возьму реальные названия, а то что-то <_> меня путает)
PHP код:

[Папка любого названия]
.. [
club1.4]
.. [
club1.5]
.. 
7za.exe
.. MakeDiffCHM.cmd
.. MakeDiffCHM.bat 

в файле MakeDiffCHM.bat (так как мне влом в Командной строке сразу столько вражеских букв набирать) написано:
Код:

MakeDiffCHM2.cmd club1.4 club1.5
Запускаем MakeDiffCHM.bat и получаем Diff_club1.4_club1.5.7z
В нём лежит
- папка [Files] - в которой набор новых (относительно папки [club1.4]) файлов
- два файла DelDirs и DelFiles - я только сейчас понял: они появляются только тогда, когда на самом деле требуется Delete. Если удалять не нужно - их нет.

А теперь - что я никак сам не могу сделать:
PHP код:

[Папка любого названия]
.. [
Bin]
..... 
7za.exe
..... hha.dll
..... hhc.exe
..... itcc.dll
.. club1.4.chm
.. club1.5.chm
.. club1.5.hhp
.. MakeDiffCHM.cmd немножко переделанный
.. MakeDiffCHM.bat 

в файле MakeDiffCHM.bat (в данном случае) будет написано:
Код:

MakeDiffCHM2.cmd club1.4.chm club1.5.chm
- Запускаем MakeDiffCHM.bat
- Оба CHM (их там может быть сколько угодно, но проверяем наличие ТОЛЬКО тех названий, которые указаны в параметрах запуска MakeDiffCHM.cmd - club1.4.chm и club1.5.chm, а порядок указывает на тот, который из них старше) развАливаются в папки с одноимёнными названиями. Для разборки используются программные файлы из папки [Bin]. Получаем старую структуру.
- файл с расширением *.hhp любого названия (он может быть НЕ БОЛЕЕ одной штуки, но вполне может его и не быть вовсе) копируется в папку с именем второго параметра - club1.5
- а теперь всё по-старому, сравниваем файлы из этих папок, формируем Diff_club1.4_club1.5.7z
- удаляем все папки, что процессе наформировали.

Наличие папки [Bin] позволяет НЕ надеяться на присутствие в Системе 7z-архиваторов и ВоркШопов.

Цитата:

в папках проекта не стоит хранить лишнюю фигню.
дык... :( там же у меня ВСЕ статьи в куче, там РЫБА валяется, там валяются ВСЕ *.hhp, Индексы и TOC от параллельных сборок, там ещё какой-то мусор... Когда запускаю в этой папке определённый файл *.hhp - он собирает только то, что в нём написано, вибирая из этого свинарника... Сейчас "Клуб переводчиков" имеет вид четырёх CHM разных сборок :(

HTML Help Workshop (в отличие от htm2chm, который спрессует указанную папку оптом, хоть туда своп положи) собирает только те файлы, которые явно указаны на собираемых страницах, причём теряет те рисунки, линки на которые имелись в CSS или в Ява-скриптах, но не имелись в других местах на страницах.

Цитата:

тебе лучше самому поправить свой MakeDiffCHM.bat. Что тут непонятного? Вроде все понятно.
"Нет хуже, когда не знаешь, да ещё и забудешь..."

Petya V4sechkin 28-01-2007 20:00 542742

APOSTOL
На конкретном примере стало более понятно.
Вот, по твоему спецзаказу: MakeDiffCHM2.cmd (вроде ничего не забыл).

Цитата:

файл с расширением *.hhp любого названия (он может быть НЕ БОЛЕЕ одной штуки, но вполне может его и не быть вовсе)
Должен быть обязательно (иначе перекомпилироваться потом из обновления не сможет).


Если будут раздражать сообщения "Внимание: папка или файл ... уже существует", поменяй строки:
Код:

Set P1=%~n1
If Exist "!P1!" Call :Halt "Внимание: папка или файл !P1! уже существует, переименуйте или удалите ее."

Set P2=%~n2
If Exist "!P2!" Call :Halt "Внимание: папка или файл !P2! уже существует, переименуйте или удалите ее."

на
Код:

Set P1=%~n1
If Exist "!P1!" RD /S /Q "!P1!"

Set P2=%~n2
If Exist "!P2!" RD /S /Q "!P2!"


APOSTOL 28-01-2007 20:09 542750

Аха. Спасибо. Щас я его...

APOSTOL 28-01-2007 20:23 542758

Да, всё работает. Веники !!!

Только не удалил за собой папки, в которые разобрал CHM, и мне так сильно кажется что эти файлы DelDirs и DelFiles нафиг не нужны в Diff, но это я уже так, выпендриваюсь.

Спасибо большое.

Цитата:

файл с расширением *.hhp должен быть обязательно
Вроде необязательно. Если это простые CHM, без всяких там Индексов-Поисков - по дефолту собираются. Надо попробовать будет. Пока - влом.

Petya V4sechkin 28-01-2007 20:26 542762

APOSTOL
Перезалил (размер 2915 байт), теперь все за собой удаляет.

Цитата:

и мне так сильно кажется что эти файлы DelDirs и DelFiles нафиг не нужны в Diff
Если создаются, значит, нужны.

Цитата:

Вроде необязательно. Если это простые CHM, без всяких там Индексов-Поисков - по дефолту собираются.
Дело в том, что hhp-файлы не создаются при декомпиляции (пересобрать заново не получится). Поэтому в любом обновлении должен быть hhp-файл.

APOSTOL 28-01-2007 20:57 542768

Гы-гы... Сделал из club1.4_Office.chm -> club1.5_Vista.chm :haha: Спасибо естчё раз. :beer:

Цитата:

Если создаются, значит, нужны.
Ну, положим я их удалял из Diff_. И так работает. Не нужны.
Сам попробуй - я к тебе на ФТП в CHM засунул Diff_any_club1.5_Vista.7z - 360 Кб (из любого СHM сделает Висту)... :beee:

vserd 15-08-2007 12:03 627886

Vadikan
посмотри на статью "Объединение CHM-файлов"
http://www.rsdn.ru/article/helpsyste...echm.xml?print


Время: 16:09.

Время: 16:09.
© OSzone.net 2001-