Открытие CHM файла создает: "Навигация на веб-странице был отменен"
Я пытаюсь открыть файл .chm.
Я загрузил источник, извлек его и дважды щелкнул по Waffle.chm
и нажал "Открыть", но независимо от того, какой элемент в файле chm нажимаю, я получаю сообщение:
Navigation to the webpage was canceled.
What you can try:
Retype the address.
![enter image description here]()
Что здесь происходит?
Ответы
Ответ 1
Резюме
Обновления безопасности Microsoft 896358 и 840315 блокируют отображение содержимого файла CHM при открытии с сетевого диска (или пути UNC). Это попытка Windows остановить векторы атаки для вирусов/вредоносных программ на заражение вашего компьютера, и она заблокировала файл .chm, который рисует данные по протоколу "InfoTech", который использует этот файл chm.
Сводка проблемы Microsoft: http://support.microsoft.com/kb/896054
Решения
-
Если вы используете Windows Server 2008, Windows 7, Windows создала быстрое решение. Щелкните правой кнопкой мыши на файле chm, и вы получите диалоговое окно "Свойства вашего файла .chm", внизу появляется кнопка "Разблокировать". Нажмите Разблокировать и нажмите ОК, и попробуйте снова открыть файл chm, он работает правильно. Этот параметр недоступен для более ранних версий Windows до WindowsXP (SP3).
![N1jEQ.png]()
-
Решите проблему, переместив файл chm с сетевого диска. Возможно, вы не знаете, используете ли вы сетевой диск, проверьте дважды: щелкните правой кнопкой мыши свой файл .chm, выберите "Свойства" и посмотрите на поле "Местоположение". Если он начинается с двух обратных косых черт, например: \\epicserver\blah\
, то вы используете сетевой диск. Чтобы исправить это, скопируйте файл chm и вставьте его на локальный диск, например C:\или E :. Затем попробуйте снова открыть файл CHM, Windows не волнуется.
-
В крайнем случае, если вы не можете скопировать/переместить файл с сетевого диска. Если вам нужно открыть его там, где он находится, и вы используете меньшую версию 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.
Ответ 2
"разблокировка" файла устраняет проблему. Снимок экрана:
![enter image description here]()
Ответ 3
В дополнение к Eric Leschinski ответ, и потому что это stackoverflow, программное решение:
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) есть скрытые файлы, но я еще не дошел до этого.
P.s. Delphi DeleteFile() также должен распознавать forks.
Ответ 4
Win 8 x64:
просто переместите его в другую папку или переименуйте свою папку (в моем случае: моя папка была "С#" ).
избегать использования символа в имени папки. назовите его буквой.
сделано.
Ответ 5
Окончательное решение - разрешить работу протокола InfoTech в зоне интрасети.
Добавьте в реестр следующее значение, и проблема должна быть решена:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
"MaxAllowedZone"=dword:00000001
Дополнительная информация здесь: http://support.microsoft.com/kb/896054
Ответ 6
Перейдите в начало
Введите regsvr32 hhctrl.ocx
Вы должны получить сообщение об успешном завершении, например:
"DllRegisterServer в hhctrl.ocx преуспел"
Теперь попробуйте снова открыть CHM файл.
Ответ 7
другим способом является использование другого стороннего программного обеспечения. Эта ссылка показывает больше стороннего программного обеспечения для просмотра файлов chm...
Я пробовал с SumatraPDF, и он отлично работает.
Ответ 8
Я исправил это программно в своем программном обеспечении, используя С++ Builder.
Прежде чем назначить файл справки CHM, Application->HelpFile = HelpFileName
, я проверяю, содержит ли он поток "Zone.Identifier", и когда он это делает, я просто удаляю его.
String ZIStream(HelpFileName + ":Zone.Identifier") ;
if (FileExists(ZIStream))
{ DeleteFile(ZIStream) ; }
Ответ 9
Существуют, по-видимому, разные уровни аутентификации. В большинстве статей, которые я прочитал, вы указываете, что 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" должен был выполнять эту работу на другом ПК, но не на моем тестовом. Это, вероятно, совсем не требуется, но когда я добавил его, он исправил проблему. Пользователь, возможно, не закрыл исходный файл или что-то в этом роде. Так что просто соображение. Я предлагаю попробовать поменьше и протестировать его, а затем добавить, если необходимо. Как только вы подтвердите, вы можете развернуть при необходимости. Удачи!
Изменить: P.S. Другим методом, который работал, было сопоставление пути к локальной сети с помощью mklink/d (символическая ссылка в Windows 7 или новее), но отображение буквы сетевого диска (Z: для тестирования) не сработало. Просто пища для размышлений, и мне не пришлось "Разблокировать" любые файлы. Также принятое "решение" не разрешило проблему для меня.