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

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

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

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

enter image description here

что здесь происходит?

9 ответов


резюме

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

сводка Microsoft о проблеме: http://support.microsoft.com/kb/896054

решений

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

  2. решите проблему, переместив файл chm с сетевого диска. Возможно ,вы не знаете, что используете сетевой диск, дважды проверьте сейчас: щелкните правой кнопкой мыши.CHM-файл, нажмите Свойства и посмотрите на поле "местоположение". Если он начинается с двух обратных косых черт, как это:\epicserver\blah\, тогда вы используете сетевой диск. чтобы исправить это, скопируйте файл chm и вставьте его в локальный диск, например C:\ или Ми.: затем попробуйте открыть файл 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.


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

enter image description here


В дополнение к ответу Эрика Leschinski, а ведь это сайте StackOverflow, решение programmatical:

Windows использует скрытые файловые вилки, чтобы пометить содержимое как"загруженное". Усечение этих разблокирует файл. Имя потока, используемого для CHM, - " Zone.Идентификатор." Можно получить доступ к потокам, добавив: 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. DeleteFile () Delphi также должен распознавать вилки.


Win 8 x64:

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

сделано.


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

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

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

подробнее здесь: http://support.microsoft.com/kb/896054


перейти к Start

тип regsvr32 hhctrl.ocx

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

" DllRegisterServer в hhctrl.ОСХ удалось "

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


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

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


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

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

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

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

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

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

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

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: для тестирования) не сработало. Просто пища для размышлений, и мне не нужно было "разблокировать" какие-либо файлы. Также принятое "решение" не решило проблему для меня.