84

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

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

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

在此处输入图像描述

这里发生了什么?

4

10 回答 10

170

概括

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

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

解决方案

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

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

  3. 最后一招,如果您无法将文件复制/移出网络驱动器。如果你必须在它所在的位置打开它,并且你使用的是 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。

于 2012-07-11T18:07:07.690 回答
44

“解锁”文件可以解决问题。截屏:

在此处输入图像描述

于 2013-04-30T08:34:11.950 回答
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() 也应该能识别分叉。

于 2012-07-15T10:19:55.743 回答
11

赢得 8 x64:

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

完毕。

于 2014-02-02T13:35:34.863 回答
6

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

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

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

更多信息在这里:http: //support.microsoft.com/kb/896054

于 2013-04-20T02:11:05.637 回答
4

去开始

类型regsvr32 hhctrl.ocx

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

“ hhctrl.ocx 中的 DllRegisterServer 成功”

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

于 2012-11-19T14:18:15.060 回答
3

另一种方法是使用不同的第三方软件。 此链接显示更多第三方软件来查看 chm 文件...

我尝试使用 SumatraPDF,它工作正常。

于 2015-01-02T11:56:44.420 回答
2

我使用 C++ Builder 在我的软件中以编程方式修复了这个问题。

在分配 CHM 帮助文件之前Application->HelpFile = HelpFileName,我检查它是否包含“Zone.Identifier”流,如果包含,我只需将其删除。

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

if (FileExists(ZIStream))
    { DeleteFile(ZIStream) ; }
于 2014-10-06T14:11:33.010 回答
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:用于测试)不起作用。只是深思熟虑,我不必“解锁”任何文件。此外,接受的“解决方案”并没有为我解决问题。

于 2016-05-26T16:31:23.447 回答
0

移动到本地文件夹是最快的解决方案,尤其是因为我不是系统上的管理员(无法编辑注册表等),这对我来说没有任何用处,这是工作环境中的典型案例。

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

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

于 2021-01-27T20:56:58.403 回答