Windows 打开一个CHM文件会产生:";“网页导航已取消”;

Windows 打开一个CHM文件会产生:";“网页导航已取消”;,windows,chm,Windows,Chm,我正在尝试打开一个.chm文件 我下载了源代码,将其解压缩,然后双击Waffle.chm并单击“打开”,但无论我单击chm文件中的哪个元素,我都会收到以下消息: Navigation to the webpage was canceled. What you can try: Retype the address. 这里发生了什么事?摘要 当从网络驱动器(或网络驱动器)打开时,Microsoft安全更新896358和840315 CHM文件内容的块显示。这是Windows试图阻止病

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

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

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


这里发生了什么事?

摘要

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

Microsoft对该问题的总结:

解决方案

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

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

  • 如果您无法将文件复制/移出网络驱动器,则是最后的选择。如果您必须在它所在的位置打开它,并且您使用的是XP、Vista、ME或其他较低版本的windows,那么您必须手动告诉windows不要因为这个.chm文件而惊慌失措。实用程序自动执行此任务。基本上,您可以下载HHReg实用程序,加载.chm文件,按“确定”,它将创建必要的注册表项,告诉Windows不要阻止它。有关更多信息:


  • Windows 8或10?-->升级到Windows XP。

    除了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)上存在隐藏文件,但我还没有弄清楚到底是什么

    另外,Delphi的DeleteFile()还应该识别fork。

    转到开始

    键入
    regsvr32 hhctrl.ocx

    您应该会收到如下成功消息:

    “hhctrl.ocx中的DllRegisterServer成功”


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

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

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

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
    "MaxAllowedZone"=dword:00000001
    
    此处的详细信息:

    “取消阻止”文件可修复此问题。截图:

    Win 8 x64:

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


    。< /P> < P>我用C++ Builder在程序中用这个方法固定。p> 在分配CHM帮助文件,

    Application->HelpFile=HelpFileName
    之前,我检查它是否包含“Zone.Identifier”流,当它包含时,我只需删除它

    String ZIStream(HelpFileName + ":Zone.Identifier") ;
    
    if (FileExists(ZIStream))
        { DeleteFile(ZIStream) ; }
    

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


    我试过SumatraPDF,效果很好。

    显然有不同级别的身份验证。我读过的大多数文章都告诉您将MaxAllowedZone设置为“1”,这意味着允许本地计算机区域和intranet区域,但“4”允许访问“所有”区域

    有关更多信息,请阅读本文:

    这就是我的注册表的外观(我不确定它是否适用于通配符,但它似乎适用于我):

    Windows注册表编辑器5.00版
    [HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\HTMLHelp]
    [HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x]
    [HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
    “MaxAllowedZone”=dword:00000004
    [HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
    “UrlAllowList”=“ies-inc.local”;http://www.*;http://*;https://www.*;https://*;”
    
    作为补充说明,奇怪的是,“UrlAllowList”键被要求在另一台PC上工作,而不是在我的测试PC上。它可能根本不是必需的,但当我添加它时,它解决了问题。用户可能没有关闭原始文件或类似文件。所以这只是一个考虑。我建议尽可能少地尝试并测试它,然后在需要时添加。一旦确认,就可以根据需要进行部署。祝你好运


    编辑:p.S.另一种有效的方法是使用mklink/d(Windows 7或更高版本中的符号链接)本地映射到网络的路径,但映射网络驱动器号(Z:用于测试)不起作用。这是值得思考的,我不需要“解锁”任何文件。此外,接受的“解决方案”也没有解决我的问题。

    移动到本地文件夹是最快的解决方案,其他任何解决方案都不适用于我,尤其是因为我不是系统管理员(无法编辑注册表等),这是工作环境中的典型情况

    Create a folder in C:\help drive, lets call it help and copy the files there and open.
    
    不要复制到mydocuments或其他任何地方,这些位置通常位于office安装程序中的网络驱动器上,不会工作。

    我在WinXP SP3或WinVista Home Premiums解决方案1上都没有看到“取消阻止”按钮
    Create a folder in C:\help drive, lets call it help and copy the files there and open.