打开CHM文件出现:“导航到网页被取消”的错误信息。

84

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

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

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

enter image description here

这里发生了什么?

10个回答

170

摘要

Microsoft安全更新896358和840315会在从网络驱动器(或UNC路径)打开CHM文件时阻止显示其内容。这是Windows试图阻止病毒/恶意软件攻击向量感染您的计算机,并已封锁了使用“InfoTech”协议提取数据的.chm文件。

微软对该问题的总结:http://support.microsoft.com/kb/896054

解决方案

  1. 如果您正在使用Windows Server 2008、Windows 7,Windows已经创建了一个快速修复程序。右键单击chm文件,会出现“yourfile.chm属性”对话框,在底部会出现一个名为“解除锁定”的按钮。点击“解除锁定”,然后按OK,再尝试打开chm文件,它将正常工作。这个选项不适用于Windows XP(SP3)之前的早期版本。

  2. 通过将chm文件从网络驱动器中移走来解决问题。您可能没有意识到自己正在使用网络驱动器,请立即进行双重检查:右键单击.chm文件,单击属性,然后查看“位置”字段。如果以两个反斜杠开头,例如:\\epicserver\blah\,那么您正在使用网络驱动器。因此,为了解决这个问题,复制chm文件,然后粘贴到本地驱动器(如C:\或E:)。然后尝试重新打开chm文件,Windows就不会出错了。

  3. 如果您无法将文件从网络驱动器中复制/移动,则最后的办法是手动告诉Windows不要在这个.chm文件上出错。如果您必须在原地打开它,并且您正在使用较低版本的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个可能的解决方案相匹配。将“MaxAllowedZone”设置为“1”对我来说解决了问题。 - abstrask
UNBLOCK没有帮助,你必须将文件复制到本地驱动器并从(非网络)本地驱动器打开它。 - Erdinc Ay
1
这个问题也会影响从互联网下载的chm文件。解除阻止按钮/复选框可能在下载后不会出现。根据我的经验,需要先从本地文件系统打开chm文件,查看它是否被破坏,关闭它,然后才能进入文件属性进行解锁。 - Frédéric

44

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

输入图像说明


我已经忘记了,因为我很久没有使用这个技巧了。谢谢你再次提醒我。 - kta
@kaziTanvirAhsan 很高兴我能帮到你。 - colemik
从网络位置移动到本地位置是不够的 - 您需要像屏幕截图中那样解除阻止。感谢 @trismarck。 - leinad13
这个可行!谢谢。我自己永远想不出来。 - NilsB
无法在Win-7中找到此选项。 我将网络文件复制到本地机器上,它可以正常工作。 - tsenapathy

11

Win 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)上存在隐藏文件,但我还没有深入研究。

P.s. Delphi的DeleteFile()也应该识别分叉。


非常有趣的回答。我在哪里可以找到更多关于这个隐藏文件分叉的信息? - ViRuSTriNiTy
MSDN。例如,某人发表了一条评论,称deletefile也可以工作,我查看了MSDN中相关的调用,并且函数的行为如何被记录下来。我从互联网上获取了特定的Zone.Identifier位。如果您对MSIE有高安全设置,则它也适用于例如被阻止的dled EXE。 - Marco van de Voort

6

明确的解决方案是允许InfoTech协议在内部网络区域中工作。

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

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

更多信息请查看: http://support.microsoft.com/kb/896054

该链接提供了有关IT技术的详细信息。

4

转到开始菜单

输入 regsvr32 hhctrl.ocx

你应该会看到一个类似成功的信息:

" 在 hhctrl.ocx 中,DllRegisterServer 成功。"

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


1
哇...这对我有用...(右键单击文件,属性没有显示“解除锁定”按钮。而这个可以正常工作) - 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”密钥,而在我的测试电脑上则不需要。它可能根本不需要,但当我添加它时,问题得到了解决。用户可能没有关闭原始文件或类似的情况。所以这只是一个考虑因素。我建议先尝试最少并进行测试,然后根据需要添加。确认后,如果需要部署。祝好运!
编辑:另一种有效的方法是通过使用mklink /d(Windows 7或更高版本中的符号链接)将路径映射到本地网络,但映射到网络驱动器字母(例如Z:进行测试)则无法工作。这只是一个思路,我不必“解除阻止”任何文件。此外,“解决方案”的接受并不能解决我的问题。

没问题,我很高兴有人受益了。最好的祝福! - jacktrader

0

将文件夹移动到本地是最快的解决方案,因为在工作环境中,我不是系统管理员(无法编辑注册表等),其他方法都没有效果。

Create a folder in C:\help drive, lets call it help and copy the files there and open.

不要复制到我的文档或其他任何地方,这些位置通常在办公室设置的网络驱动器上,无法正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接