Открытие файла CHM приводит к: "переход к веб-странице был отменен"

Я пытаюсь открыть файл.chm.

Я скачал источник, извлек его и дважды щелкнул Waffle.chm и нажал "Открыть", но независимо от того, какой элемент в файле chm я нажимаю, я получаю сообщение:

Navigation to the webpage was canceled.  
What you can try: 
Retype the address.  

Что тут происходит?

10 ответов

Решение

Резюме

Обновления безопасности Microsoft 896358 и 840315 блокируют отображение содержимого файла CHM при открытии с сетевого диска (или пути UNC). Это попытка окна остановить векторы атаки для вирусов / вредоносных программ на заражение вашего компьютера и заблокировала файл.chm, который рисует данные по протоколу "InfoTech", который использует этот файл chm.

Краткое изложение проблемы Microsoft: http://support.microsoft.com/kb/896054

Решения

  1. Если вы используете Windows Server 2008, Windows 7, Windows создала быстрое решение. Щелкните правой кнопкой мыши на файле chm, и вы получите диалоговое окно "Свойства вашего файла.chm", внизу появляется кнопка "Разблокировать". Нажмите Разблокировать и нажмите ОК, и попробуйте снова открыть файл chm, он работает правильно. Эта опция недоступна для более ранних версий Windows до WinXP(SP3).

  2. Решите проблему, переместив файл chm с сетевого диска. Возможно, вы не знаете, используете ли вы сетевой диск, проверьте дважды: щелкните правой кнопкой мыши свой файл.chm, выберите "Свойства" и посмотрите на поле "Местоположение". Если это начинается с двух обратных слешей, как это: \\epicserver\blah\, то вы используете сетевой диск. Чтобы исправить это, скопируйте файл chm и вставьте его на локальный диск, например C:\ или E:. Затем попробуйте снова открыть файл CHM, Windows не волнуется.

  3. В крайнем случае, если вы не можете скопировать / переместить файл с сетевого диска. Если вам нужно открыть его там, где он находится, и вы используете меньшую версию Windows, такую ​​как XP, Vista, ME или другие, вам придется вручную сказать Windows, чтобы не волноваться из-за этого CHM-файла. HHReg (утилита регистрации справки HTML) Автоматизирует эту задачу. В основном вы загружаете утилиту HHReg, загружаете свой файл.chm, нажимаете OK, и он создает необходимые ключи реестра, чтобы запретить Windows блокировать его. Для получения дополнительной информации: http://www.winhelponline.com/blog/fix-cannot-view-chm-files-network-xp-2003-vista/

Windows 8 или 10? -> Обновление до Windows XP.

"Разблокировка" файла устраняет проблему. Скриншот:

Win 8 x64:

просто переместите его в другую папку или переименуйте вашу папку (в моем случае: моя папка была "C#"). Избегайте использования символа в имени папки. назовите это буквой.

сделанный.

В дополнение к ответу Эрика Лещинского, а также потому, что это - stackru, программное решение:

Windows использует скрытые файловые вилки, чтобы пометить контент как "загруженный". Усечение этих разблокирует файл. Имя потока, используемого для CHM, является "Zone.Identifier". Можно получить доступ к потокам, добавив: streamname при открытии файла. (сохраняйте резервные копии в первый раз, если ваш RTL испортил это!)

В Delphi это будет выглядеть так:

var f : file;
begin
 writeln('unblocking ',s);
 assignfile(f,'some.chm:Zone.Identifier');
 rewrite(f,1);
 truncate(f);
 closefile(f);
end;

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

Ps Delphi DeleteFile() также должен распознавать вилки.

Окончательное решение - позволить протоколу InfoTech работать в зоне интрасети.

Добавьте следующее значение в реестр, и проблема должна быть решена:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
"MaxAllowedZone"=dword:00000001

Более подробная информация здесь: http://support.microsoft.com/kb/896054

Перейти к началу

Тип regsvr32 hhctrl.ocx

Вы должны получить сообщение об успехе, как:

"DllRegisterServer в hhctrl.ocx успешно выполнен"

Теперь попробуйте снова открыть файл CHM.

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

Я пытался с SumatraPDF, и он работает нормально.

Я исправил это программно в моем программном обеспечении, используя C++ Builder.

Прежде чем назначить файл справки CHM, Application->HelpFile = HelpFileNameЯ проверяю, содержит ли он поток "Zone.Identifier", и когда это происходит, я просто удаляю его.

String ZIStream(HelpFileName + ":Zone.Identifier") ;

if (FileExists(ZIStream))
    { DeleteFile(ZIStream) ; }

Существуют разные уровни аутентификации. В большинстве статей, которые я прочитал, говорится, что для MaxAllowedZone нужно установить значение "1", что означает, что зона локального компьютера и зона интрасети разрешены, но "4" разрешает доступ для "всех" зон.

Для получения дополнительной информации прочитайте эту статью: https://support.microsoft.com/en-us/kb/892675

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

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
"MaxAllowedZone"=dword:00000004

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
"UrlAllowList"="\\\\<network_path_root>;\\\\<network_path_root>\*;\\ies-inc.local;http://www.*;http://*;https://www.*;https://*;"

Как дополнительное примечание, странно, что ключ "UrlAllowList" был необходим для того, чтобы эта работа работала на другом ПК, но не на моем тестовом. Это, вероятно, не требуется вообще, но когда я добавил его, это решило проблему. Пользователь, возможно, не закрыл оригинальный файл или что-то в этом роде. Так что просто соображение. Я предлагаю попробовать как минимум и протестировать его, а затем добавить, если необходимо. Как только вы подтвердите, вы можете развернуть при необходимости. Удачи!

Редактировать: PS Еще один метод, который работал, заключался в том, чтобы сопоставить путь к сети локально с помощью mklink /d (символическое связывание в Windows 7 или новее), но сопоставление буквы сетевого диска (Z: для тестирования) не сработало. Просто пища для размышлений, и мне не нужно было "разблокировать" какие-либо файлы. Также принятое "Решение" не решило проблему для меня.

Перемещение в локальную папку — самое быстрое решение, у меня больше ничего не сработало, особенно потому, что я не был администратором в своей системе (не могу редактировать реестр и т. д.), что является типичным случаем в рабочей среде.

      Create a folder in C:\help drive, lets call it help and copy the files there and open.

Не копируйте в mydocuments или куда-либо еще, эти места обычно находятся на сетевом диске в настройках офиса и не будут работать.

Другие вопросы по тегам