Открытие файла CHM производит: "навигация на веб-страницу была отменена"
Я пытаюсь открыть .файл CHM.
Я загрузил источник, извлек его и дважды щелкнул по Waffle.chm
и нажал "открыть", но независимо от того, какой элемент в файле chm я нажимаю, я получаю сообщение:
Navigation to the webpage was canceled.
What you can try:
Retype the address.
что здесь происходит?
9 ответов:
резюме
Microsoft Security Updates 896358 & 840315 блокирует отображение содержимого файла CHM при открытии с сетевого диска (или UNC path). Это попытка окна остановить векторы атаки для вирусов / mal-ware от заражения вашего компьютера и заблокировал .chm-файл, который рисует данные по протоколу "InfoTech", который использует этот файл chm.
краткое описание проблемы Microsoft: http://support.microsoft.com/kb/896054
решений
Если вы используете Windows Server 2008, Windows 7, windows создала быстрое исправление. щелкните правой кнопкой мыши файл chm, и вы получите "yourfile.диалоговое окно "Свойства chm", внизу, появляется кнопка" разблокировать". Нажмите разблокировать и нажмите OK, и попробуйте снова открыть файл chm, он работает правильно. Эта опция недоступна для более ранних версий версии windows до WinXP (SP3).
решите проблему, переместив файл chm с сетевого диска. Вы можете не знать, что вы используете сетевой диск, дважды проверьте сейчас: щелкните правой кнопкой мыши .chm файл, нажмите кнопку Свойства и посмотрите на поле "расположение". Если он начинается с двух обратных косых черт, как это:
\epicserver\blah\
, то вы используете сетевой диск. чтобы исправить это, скопируйте файл chm и вставьте его в локальный диск, например C:\ or Ми.: затем попробуйте снова открыть файл chm, windows не волнуется.в крайнем случае, если вы не можете скопировать/переместить файл с сетевого диска. Если вы должны открыть его там, где он сидит, и вы используете меньшую версию windows, как XP, Vista, ME или другие, вам придется вручную скажите Windows, чтобы не волноваться по этому поводу .файл CHM. HHReg (HTML Help Registration Utility) утилита автоматизирует эту задачу. в основном скачать Утилита HHReg, загрузите ваш .chm файл, нажмите OK, и он создаст необходимые ключи реестра, чтобы сказать Windows, чтобы не блокировать его. Для получения дополнительной информации: http://www.winhelponline.com/blog/fix-cannot-view-chm-files-network-xp-2003-vista/
Windows 8 или 10? -- >Обновление до Windows XP.
в дополнение к ответу Эрика Лещинского, и потому что это stackoverflow, программное решение:
Windows использует скрытые файловые вилки для пометки содержимого как"загруженного". Усечение этих разблокирует файл. Имя потока, используемого для CHM, - " зона.Идентификатор." Можно получить доступ к потокам, добавив: 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 () также должен распознавать вилки.
Win 8 x64:
просто переместите его в другую папку или переименуйте папку (в моем случае: моя папка была "c#"). избегайте использования символа в имени папки. назовите его буквой.
сделано.
окончательное решение состоит в том, чтобы позволить протоколу InfoTech работать в зоне интрасети.
добавьте в реестр следующее значение и проблема должна быть решена:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp.x\ItssRestrictions] "MaxAllowedZone"=dword:00000001
подробнее здесь:http://support.microsoft.com/kb/896054
перейти к началу
тип
regsvr32 hhctrl.ocx
вы должны получить сообщение об успехе, как:
" DllRegisterServer в hhctrl.ОСХ удалось "
теперь попробуйте снова открыть файл CHM.
другой способ заключается в использовании различных сторонних программ. этой ссылке показывает больше программного обеспечения третьей стороны для просмотра файлов chm...
Я пробовал с SumatraPDF и он работает нормально.
я исправил это программно в моем программном обеспечении, используя C++ Builder.
прежде чем я назначу файл справки CHM,
Application->HelpFile = HelpFileName
, Я проверяю, содержит ли он " Зону.Идентификатор " поток, и когда это происходит, я просто удаляю его.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.x] [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp.x\ItssRestrictions] "MaxAllowedZone"=dword:00000004 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp.x\ItssRestrictions] "UrlAllowList"="\\<network_path_root>;\\<network_path_root>\*;\ies-inc.local;http://www.*;http://*;https://www.*;https://*;"
в качестве дополнительной заметки, как ни странно, ключ "UrlAllowList" был необходим для выполнения этой работы на другом ПК, но не на моем тестовом. Это, вероятно, не требуется вообще, но когда я добавил его, он исправил проблему. Возможно, пользователь не закрыл исходный файл или что-то в этом роде. Так что просто соображение. Я предлагаю попробовать наименее и проверить его, а затем добавить, если это необходимо. После подтверждения можно выполнить развертывание, если это необходимо. Удачи Вам!
Edit: С. П. другой способ это работало, сопоставляя путь к сети локально с помощью mklink /d (символическое связывание в Windows 7 или новее), но сопоставление буквы сетевого диска (Z: для тестирования) не работало. Просто пища для размышлений, и мне не пришлось "разблокировать" какие-либо файлы. Также принятое "решение" не решило проблему для меня.