2016-08-18 5 views
4

Я столкнулся с вполне проводным сбоем после того, как успешно скомпилировал файл .chm с Рабочий стол HTMLhhc.exe.HTML Help Workshop возвращает ошибку после успешно скомпилированного файла .chm

Я создал документацию по исходному коду с Doxygen. Doxygen создает, если вы включите GENERATE_HTMLHELP в файле Doxygen:

If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
additional HTML index files: index.hhp, index.hhc, and index.hhk. The index.hhp
is a project file that can be read by Microsoft's HTML Help Workshop (see:
http://www.microsoft.com/en-us/download/details.aspx?id=21138) on Windows.

После Doxygen создает эти файлы, я хочу, чтобы создать файл .chm с HTML Help Workshop. По этой причине я вызываю hhc.exe в CMD. После этого я могу открыть файл .chm, и все кажется прекрасным. Но если я задаю CMD для текущего errorlevel, она выводит:

"C:\Program Files (x86)\HTML Help Workshop\hhc.exe" index.hhp 
Microsoft HTML Help Compiler 4.74.8702 

Compiling C:\... folder path ...\index.chm 

Compile time: 0 minutes, 0 seconds 
37  Topics 
346  Local links 
12  Internet links 
0  Graphics 

Created C:\... folder path ...\index.chm, 88,740 bytes 
Compression decreased file by 194,682 bytes. 

echo %errorlevel% 
1 

Кто-нибудь есть идея о том, что в час ... будет здесь не так, и как я могу избежать этой проблемы, что он успешно, но по-прежнему компилируется возвращает ошибку? Как я могу выяснить, в чем проблема, а не ошибка «1»?

Проблема в том, что мой сервер сборки (TFS2015) возвращает ошибку, и сборка не удалась.

+0

Это проблема, которая регулярно и головоломка возникает из-за того, что hhc.exe возвращает не ожидаемое возвращаемое значение. Какую версию doxygen вы используете, и используете ли вы hhc.exe с помощью doxygen или отдельно? – albert

+0

Версия Doxygen: 1.8.11, и я запускаю ее отдельно (скрипт сборки и повторяемость в CMD). Оба имеют такое же поведение. –

+0

Что произойдет, если вы запустите его внутри doxygen? или это невозможно. В последнем случае вы игнорируете код ошибки в файле сценария сборки. – albert

ответ

5

HTML Help Workshop устанавливаются с 2-х основными исполняемыми файлами:

  1. hhc.exe является консоли версии HTML Help Compiler.
  2. hhw.exe является Windows GUI версия HTML Help Compiler.

Но компиляция HTML-проекта справки (hhp) для скомпилированного HTML (chm) напрямую не выполняется этими двумя исполняемыми файлами.

Оба используются для компиляции hha.dll - Библиотека справки HTML-справки - путем вызова экспортируемой функции HHA_CompileHHP.

Экспортируемые функции этой библиотеки являются:

  • EditHhCtrlObject
  • EditHhCtrlScript
  • FreeFilterDIB
  • HHA_CompileHHP
  • LoadFilterImage
  • LoadJpeg

Корпорация Майкрософт не опубликовала ни одной документации, ни деклараций функций этих функций, насколько я знаю.

Я полагаю от некоторых быстрых тестов с hhc.exe что функция HHA_CompileHHP имеет BOOL как тип возврата, который является int и возвращается на успех TRUE, то есть значения 1, и в случае неудачи FALSE, т.е. значения 0. И похоже, что hhc.exe использует это возвращаемое значение, не инвертируя значение как код выхода/возврата.

Поэтому errorlevel является 1 по успеху и 0 при аварии.

тесты я сделал, чтобы проверить мое предположение:

  1. Run HTML Help компилятора с именем файла проекта, который не существует:

    hhc.exe index_1.hhp 
    

    Unable to open index_1.hhp.

    Выход кода соответственно errorlevel 0. Это сообщение об ошибке печатается hhc.exe, потому что сообщение об ошибке можно найти в hhc.exe.

  2. Set только для чтения файла атрибут на уже существующий выходной файл index.chm и запустить HTML Help компилятор:

    attrib +r index.chm & hhc.exe index.hhp & attrib -r index.chm 
    

    HHC5010: Error: Cannot open "C:... folder path ...\index.chm". Compilation stopped.

    Код выхода соответственно errorlevel 0. Это сообщение об ошибке печатается hha.dll, потому что это сообщение об ошибке можно найти только в hha.dll.

  3. Переименование * .htm файла явно указанный в index.hhp и запустить HTML Help Compiler:

    ren "file.htm" "renamed file.htm" & hhc.exe index.hhp & ren "renamed file.htm" "file.htm" 
    

    Microsoft HTML Help Compiler 4.74.8702

    Compiling C:... folder path ...\index.chm

    HHC5003: Error: Compilation failed while compiling file.htm.

    The following files were not compiled:
    file.htm

    Код выхода соответственно errorlevel 0. Это сообщение об ошибке выводится также hha.dll из-за этой ошибки сообщение может быть найдено только в hha.dll.

Все сообщения об ошибках записываются в обращении STDOUT и не STDERR в качестве типичных для консольных приложений. Никогда не было другого значения, кроме 0 или 1, назначенного errorlevel, поэтому я полагаю, что функция HHA_CompileHHP возвращает простое булево значение.

Вывод:

Противоположный как обычно должно быть сделано, чтобы оценить на успех/провал в HTML-справки компиляции, например, путем использования в пакетном файле:

"%ProgramFiles(x86)%\HTML Help Workshop\hhc.exe" index.hhp 
if not errorlevel 1 exit /B 1 

В Помощь проекту HTML file (* .hhp file) в разделе [OPTIONS] файл журнала может быть указан Error log file=..., в который все сообщения, выводимые HHA_CompileHHP, записываются дополнительно для их печати до STDOUT.

Но в этом случае с порождающим Doxygen * .hhp файл будет легче перенаправлять STDOUT в пакетный файл в файл журнала, хотя это тоже не очень нужны, потому что, скорее всего, сервер Team Foundation является фиксируя сообщения уже в журнале. (У меня не установлен Team Foundation Server.)

+0

Спасибо Mofi, спасибо за проверку. Я добавил команду, что она будет успешной, если уровень ошибок равен 1. –

0

HTML Workshop - это программа GUI. При интерактивном использовании CMD он не ждет выхода программ GUI. Поэтому код ошибки отсутствует.

Echo %errorlevel% интерактивно никогда не будет отображаться код ошибки.

Эти два способа будут

Dir && Echo Success || Echo Failure 

Dir df:\ & Echo %errorlevel% 

[Смотрите мой ответ на Trouble with renaming folders and sub folders using Batch, чтобы увидеть, что это значит]

Вы должны прочитать документацию HTML Workshop, чтобы увидеть, если он устанавливает ErrorLevel. Большинство программ GUI не беспокоят.

+0

OP ** ** получает код ошибки. – FloatingKiwi

+0

Посмотрите на свой снимок экрана, прежде чем комментировать. – Noodles

+0

Я смущен ... мне кажется, что он имеет errorlevel = 1. – FloatingKiwi

 Смежные вопросы

  • Нет связанных вопросов^_^