下载的chm被阻止了,有解决办法吗?

下载的chm被阻止了,有解决办法吗?

下载的 CHM 文件通常被 Windows 标记为潜在恶意文件,这实际上会阻止其中的所有 html 页面。有一个简单的解决方法(只需在下载文件后解除阻止),但我想知道是否有更好的方法来提供未阻止的 chm 文件。

如果我在应用程序内部从我们的服务器下载 chm 文件(作为字节流),然后将所有数据写入磁盘上的文件,会怎么样? 它还会被阻止吗?

还有其他/更好的方法吗?


编辑:是的,使用 System.Net.WebClient 下载文件确实解决了问题。但是,还有更好的方法吗?

答案1

右键单击 .chm 文件 -> 属性,然后单击“解除阻止”按钮,即可开始!

答案2

从技术上讲,当 IE 下载文件时,它会使用 Windows 文件系统的一个鲜为人知的功能,您可以在其中附加附加数据流。IE 添加了 :Zone.Identifier 流,它们以以下形式写入 ini 样式的数据:

[ZoneTransfer]
ZoneId=$id

$id 标识该文件的信任区域,并将其设置为 URLZONE_INTRANET (http://msdn.microsoft.com/en-us/library/ms537175(v=vs.85).aspx)。

修复此问题的一种方法是将 $id 更改为 URLZONE_LOCAL_MACHINE。另一种方法是直接删除此流。

当我们添加 CHM 支持时,您可以看到我是如何在 C++ 中为我的 Sumatra PDF 查看器实现的:http://code.google.com/p/sumatrapdf/source/detail?r=4639http://www.google.com/codesearch#8WOCRDPt-u8/trunk/src/utils/FileUtil.cpp&q=SetZoneIdentifier%20package:http://sumatrapdf%5C.googlecode%5C.com&l=340

我不确定您是否认为这是一个比自己下载文件更好的解决方案。

答案3

典型的微软,先是引入了 .chm 这样的垃圾文件,后来又不得不屏蔽它,以使其漏洞百出的船更安全。一切都很好,但是为什么当用户在 chm 文件中看不到任何内容时,它不显示正确的错误消息来解释发生了什么。

答案4

这只是猜测,但你确定是 Windows 标记的吗? 难道不是 Internet Explorer,在这种情况下,只需使用其他浏览器即可?

相关内容