Відкриття 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.

Короткий зміст проблеми корпорації Майкрософт: http://support.microsoft.com/kb/896054

Рішення

  1. Якщо ви використовуєте Windows Server 2008, Windows 7, Windows створила швидке виправлення. Клацніть правою кнопкою миші файл chm, і ви отримаєте діалогове вікно "yourfile.chm Properties", внизу з'явиться кнопка "Розблокувати". Натисніть Розблокувати та натисніть OK, і спробуйте ще раз відкрити файл 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, натискаєте OK, і вона створить необхідні ключі реєстру, щоб повідомити 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 можливими рішеннями, враховуючи мою посилання на статтю KB. Встановлення 'MaxAllowedZone' в '1'
вирішило

UNBLOCK не допомагає, вам потрібно відкрити копію файлу на локальний диск і відкрити його з (поза мережею) локального диска.
Erdinc Ay

1
Ця проблема впливає і на chm, завантажений з Інтернету. Кнопка / прапорець розблокування може бути відсутня відразу після завантаження. На моєму досвіді, потрібно спочатку відкрити chm з локальної файлової системи, побачити його зламаним, закрити, а потім лише перейти до властивостей файлу, щоб його розблокувати.
Фредерік

43

"розблокування" файлу вирішує проблему. Знімок екрана:

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


Я забув, оскільки давно не використовував цей трюк. Дякую, що знову нагадав.
kta

@kaziTanvirAhsan рада, що могла допомогти.
colemik

Переміщення з мережевого розташування на місцеве місце недостатнє - вам потрібно розблокувати, як на цьому знімку екрана. Спасибі @trismarck
leinad13

Це спрацювало! Дякую. Я ніколи б цього не зрозумів самостійно.
NilsB

не зміг знайти такий варіант із win-7. замість того, щоб відкрити файл / w, я скопіював на свою локальну машину, і вона працює.
ценапатія

11

Win 8 x64:

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

зроблено.


Це також працює. Мій файл .chm знаходився в цій папці C: \ C # \ Samples, потім я перемістив його в C: \ temp і boom! Це працює! Дякую за це. :)
клайдзе

Відмінно! Я користувач Windows 10: довелося видалити "#" як з імені файлу, так і з назви папки зі старого файлу довідки c # chm.
Марсело Бергвайлер

11

На додаток до відповіді Еріка Лещинського, а тому, що це stackoverflow, є програмне рішення:

Windows використовує приховані файлові форки, щоб позначити вміст як "завантажений". Зрізання цих даних розблокує файл. Назва потоку, який використовується для CHM, - "Zone.Identifier". Можна отримати доступ до потоків, додавши: streamname під час відкриття файлу. (зберігайте резервні копії вперше, на випадок, якщо ваш RTL це зіпсує!)

У Дельфах це виглядало б так:

var f : file;
begin
 writeln('unblocking ',s);
 assignfile(f,'some.chm:Zone.Identifier');
 rewrite(f,1);
 truncate(f);
 closefile(f);
end;

Мені кажуть, що в нерозгалужених файлових системах (наприклад, FAT32) є приховані файли, але я ще не дойшов до суті цього.

PsF Delphi's 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.


1
Voww ... це працює для мене ... (файл клацніть правою кнопкою миші, властивості не відображають кнопку «розблокувати». Тоді як це працює нормально)
tsenapathy

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.