При открытии файла CHM происходит следующее: «переход к веб-странице был отменен».

84

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

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

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

введите описание изображения здесь

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

Эрик Лещинский
источник

Ответы:

168

Резюме

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

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

Решения

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

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

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

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

Эрик Лещинский
источник
3
Я не вижу кнопки «Разблокировать» ни в WinXP SP3, ни в WinVista Home Premium
GetFree
Решение 1 отсутствует в Windows 8, есть ли простой способ win8?
countunique
2
Ни одно из предложенных решений не соответствует 4 возможным решениям, указанным в моей статье в базе знаний, на которую имеется ссылка. Установка 'MaxAllowedZone' на '1'
устранила
UNBLOCK не помогает, вам нужно открыть копию файла на локальный диск и открыть его с (не сетевого) локального диска.
Erdinc Ay
1
Эта проблема влияет и на chm, загруженный из Интернета. Кнопка / флажок разблокировки может отсутствовать сразу после загрузки. По моему опыту, для этого требуется сначала открыть файл chm из локальной файловой системы, увидеть, как он поврежден, закрыть его, а затем перейти только к свойствам файла для его разблокировки.
Frédéric
43

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

введите описание изображения здесь

Колемик
источник
Забыл, так как давно не пользовался этим трюком. Спасибо, что еще раз напомнили.
kta
@kaziTanvirAhsan рад, что смог помочь.
colemik
Недостаточно перейти из сетевого местоположения в локальное - вам нужно разблокировать, как на этом скриншоте. Спасибо @trismarck
leinad13 07
Это сработало! Благодарю. Я бы никогда не разобрался сам.
NilsB 07
не нашел такого варианта с win-7. вместо того, чтобы открывать файл / w, я скопировал его на свой локальный компьютер, и он работает.
tsenapathy
11

Win 8 x64:

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

сделанный.

Хаммонд22
источник
Это тоже работает. Мой файл .chm находился в этой папке C: \ C # \ Samples, затем я переместил его в C: \ temp и бум! Оно работает! Спасибо за это. :)
klaydze 02
Превосходно! Я пользователь Windows 10: мне пришлось удалить знак «#» как из имени файла, так и из имени папки из старого файла справки c # chm.
Марсело
11

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

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

Марко ван де Вурт
источник
Очень интересный ответ. Где я могу найти дополнительную информацию об этой скрытой вилке файлов?
ViRuSTriNiTy
MSDN. Например, sb сделал замечание, что deletefile также работает, и я посмотрел на соответствующий вызов в MSDN, и точно задокументировано, как ведет себя функция. Конкретный бит Zone.Identifier, который я получил из Интернета. Это также работает, например, для заблокированных файлов EXE, если у вас высокие настройки безопасности для MSIE
Марко ван де Вурт
6

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

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

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

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

Получить бесплатно
источник
4

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

Тип regsvr32 hhctrl.ocx

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

"DllRegisterServer в hhctrl.ocx успешно завершен"

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

LoveToCode
источник
1
Voww ... это работает для меня ... (щелкните файл правой кнопкой мыши, в свойствах не отображается кнопка "разблокировать". В то время как это работает нормально)
tsenapathy 02
3

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

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

ценапатия
источник
2

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

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

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

if (FileExists(ZIStream))
    { DeleteFile(ZIStream) ; }
Питер
источник
1

Очевидно, существуют разные уровни аутентификации. В большинстве статей, которые я читал, предлагается установить для 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: для тестирования) не сработало. Просто пища для размышлений, и мне не пришлось «разблокировать» какие-либо файлы. Также принятое «Решение» не решило для меня проблему.

джек-трейдер
источник
Нет проблем, я рад, что кому-то помогли. Лучший!
jacktrader 01