打开CHM文件将产生:“到该网页的导航已取消”


84

我正在尝试打开.chm文件。

我下载了源代码,将其解压缩,然后双击Waffle.chm并单击“打开”,但是无论我单击的chm文件中的哪个元素,我都会收到以下消息:

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

在此处输入图片说明

这里发生了什么?

Answers:


168

概要

从网络驱动器(或UNC路径)打开时,Microsoft安全更新896358和840315阻止CHM文件内容的显示。这是Windows试图阻止病毒/恶意软件的攻击媒介感染您的计算机,并且阻止了.chm文件,该文件通过“ chm文件”使用“ InfoTech”协议绘制数据。

Microsoft的问题摘要:http : //support.microsoft.com/kb/896054

解决方案

  1. 如果您使用的是Windows Server 2008,Windows 7,则Windows已创建了一个快速修复程序。 右键单击chm文件,您将获得“ yourfile.chm属性”对话框,在底部,出现一个名为“取消阻止”的按钮。单击取消阻止,然后按确定,然后尝试再次打开chm文件,它可以正常工作。对于WindowsXP(SP3)之前的Windows早期版本,此选项不可用。

  2. 通过将chm文件移离网络驱动器来解决此问题。您可能没有意识到自己正在使用网络驱动器,请立即仔细检查:右键单击.chm文件,单击属性,然后查看“位置”字段。如果它以两个这样的反斜杠开头:\\epicserver\blah\,则说明您正在使用网络驱动器。 因此,要修复此问题,请复制chm文件,然后将其粘贴到本地驱动器中,例如C:\或E:。 然后尝试重新打开chm文件,Windows不会出现异常。

  3. 万不得已,如果您无法从网络驱动器上复制/移动文件。如果必须将其打开,并且使用的是Windows,XP,Vista,ME或其他版本的较小版本的Windows,则必须手动告诉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上都看不到“
取消

解决方案1不在Windows 8中,是否有任何简便的win8方式?
countunique 2013年

2
给定我所引用的知识库文章,没有一种建议的解决方案与这4种可能的解决方案相匹配。将'MaxAllowedZone'设置为'1'可以解决我的问题
Abstrask

UNBLOCK没有帮助,您必须打开将文件复制到本地驱动器,然后从(非网络)本地驱动器打开它。
Erdinc Ay 2015年

1
此故障也会影响从Internet下载的chm。下载后,取消锁定按钮/复选框可能不存在。以我的经验,它需要首先从本地文件系统中打开chm,将其破坏,将其关闭,然后仅转到文件属性以对其进行解锁。
弗雷德里克

43

“取消阻止”文件可解决该问题。屏幕截图:

在此处输入图片说明


我已经忘记了很长时间没有使用此技巧。再次提醒我。
kta 2014年

@kaziTanvirAhsan很高兴可以为您提供帮助。
colemik

从网络位置移动到本地位置是不够的-您需要像此屏幕截图一样进行解锁。感谢@trismarck
leinad13

这工作了!谢谢。我永远都不会想办法。
NilsB 2014年

在win-7中找不到此类选项。我没有打开一个w / w文件,而是将其复制到本地计算机上,并且可以正常工作。
tsenapathy 2015年

11

赢得8 x64:

只需将其移动到另一个文件夹或重命名您的文件夹即可(在我的情况下:我的文件夹为“ c#”)。避免在文件夹名称上使用符号。用字母命名。

完成。


这也可以。我的.chm文件位于此文件夹C:\ C#\ Samples中,然后将其移至C:\ temp并开始工作!有用!谢谢你 :)
klaydze

优秀!我是Windows 10用户:必须从旧的c#chm帮助文件中的文件名和文件夹名中都删除“#”。
Marcelo Bergweiler,

11

除了Eric Leschinski的答案之外,并且由于这是stackoverflow,因此采用了一种编程解决方案:

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()也应该识别派生。


非常有趣的答案。在哪里可以找到有关此隐藏文件分叉的更多信息?
ViRuSTriNiTy 2015年

MSDN。例如,某人说deletefile也可以工作,我查看了MSDN中的相关调用,并确切记录了该函数的行为。我从互联网上获得了特定的Zone.Identifier位。这也适用于如受阻DLED EXE文件,如果你有高安全性设置MSIE
马尔科·范·德·Voort的

6

最终的解决方案是允许InfoTech协议在Intranet区域中工作。

将以下值添加到注册表中,该问题应得到解决:

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

此处的更多信息:http : //support.microsoft.com/kb/896054


4

去开始

类型 regsvr32 hhctrl.ocx

您应该收到一条成功消息,例如:

“ hhctrl.ocx中的DllRegisterServer成功”

现在,尝试再次打开您的CHM文件。


1
Voww ...对我有用...(右键单击文件,属性未显示“ unblock”按钮。
尽管如此,它仍然

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”,这意味着允许本地计算机区域和Intranet区域,但是“ 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”键才能在另一台PC上运行该功能,但在我的测试机上却不需要。可能根本不需要它,但是当我添加它时,它解决了问题。用户可能尚未关闭原始文件或类似的文件。所以只是一个考虑。我建议至少尝试一下并进行测试,然后根据需要添加。确认后,可以根据需要进行部署。祝好运!

编辑: PS另一种有效的方法是使用mklink / d(在Windows 7或更高版本中为符号链接)将路径映射到本地网络,但映射网络驱动器号(Z:用于测试)无效。只是值得深思,我不必“取消阻止”任何文件。同样,公认的“解决方案”也无法解决我的问题。


没问题,我很高兴有人受益。最好!
jacktrader
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.