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