Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Наборы обновлений для Windows XP/2003/Windows 7 » Инфо - [техзадание] Распространение обновления для CHM файла

Ответить
Настройки темы
Инфо - [техзадание] Распространение обновления для CHM файла

(*.*)


Сообщения: 36574
Благодарности: 6712


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 26-09-2006
Доброго времени суток!

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

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

Речь идет о 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, который также будет участвовать в обсуждении.

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

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 08:31, 26-09-2006

 


Moderator


Сообщения: 53589
Благодарности: 15546

Профиль | Отправить PM | Цитировать


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

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

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

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

Наверное, Вадикан был прав - тебе лучше самому поправить свой MakeDiffCHM.bat.
Декомпиляция делается так:
Код: Выделить весь код
Start /Wait hh.exe -decompile <папка_назначения> <chm-файл>
Что тут непонятного? Вроде все понятно.

Отправлено: 14:00, 28-01-2007 | #61



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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



Moderator


Сообщения: 53589
Благодарности: 15546

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:43, 28-01-2007 | #62


Аватара для APOSTOL

old Teapot


Сообщения: 1767
Благодарности: 53

Профиль | Отправить PM | Цитировать


Как работает 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. Что тут непонятного? Вроде все понятно.
"Нет хуже, когда не знаешь, да ещё и забудешь..."

-------
Лежит боец - не справился с атакой...


Последний раз редактировалось APOSTOL, 28-01-2007 в 17:05.


Отправлено: 16:16, 28-01-2007 | #63



Moderator


Сообщения: 53589
Благодарности: 15546

Профиль | Отправить PM | Цитировать


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!"

Последний раз редактировалось Petya V4sechkin, 28-01-2007 в 20:07.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:00, 28-01-2007 | #64


Аватара для APOSTOL

old Teapot


Сообщения: 1767
Благодарности: 53

Профиль | Отправить PM | Цитировать


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

-------
Лежит боец - не справился с атакой...


Отправлено: 20:09, 28-01-2007 | #65


Аватара для APOSTOL

old Teapot


Сообщения: 1767
Благодарности: 53

Профиль | Отправить PM | Цитировать


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

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

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

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

-------
Лежит боец - не справился с атакой...


Отправлено: 20:23, 28-01-2007 | #66



Moderator


Сообщения: 53589
Благодарности: 15546

Профиль | Отправить PM | Цитировать


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

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

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

Отправлено: 20:26, 28-01-2007 | #67


Аватара для APOSTOL

old Teapot


Сообщения: 1767
Благодарности: 53

Профиль | Отправить PM | Цитировать


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

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

-------
Лежит боец - не справился с атакой...


Последний раз редактировалось APOSTOL, 28-01-2007 в 21:05.


Отправлено: 20:57, 28-01-2007 | #68


Ветеран


Сообщения: 894
Благодарности: 137

Профиль | Отправить PM | Цитировать


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

-------
Я не развожу политику в подписи
ПТН ПНХ


Отправлено: 12:03, 15-08-2007 | #69



Компьютерный форум OSzone.net » Автоматическая установка Windows » Наборы обновлений для Windows XP/2003/Windows 7 » Инфо - [техзадание] Распространение обновления для CHM файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Распространение файла реестра на компьютеры в домене admiForever Microsoft Windows NT/2000/2003 15 19-12-2009 11:39
Доступ - Отображение CHM-файла с сетевого диска Gangabass Microsoft Windows Vista 3 30-06-2008 07:40
Проблема копирования файла addremov.chm после интеграции SP2 -Fred- Автоматическая установка Windows 2000/XP/2003 3 20-02-2007 16:25
кодировка файла CHM WChek Программирование и базы данных 1 25-01-2007 21:33
Открытие CHM-файла в полноэкранном режиме Dj_Fly Программное обеспечение Windows 15 09-12-2006 09:21




 
Переход