传输 .zipped .CHM 文件仍然无法读取

传输 .zipped .CHM 文件仍然无法读取

我在 vagon.io 的在线电脑上创建了一个 .CHM 文件,然后将其传输到我的本地电脑。但是当我打开它时,出现“未知发布者”错误,并且页面内容为空白。

我找到了这个问题的解决方案,https://superuser.com/a/1507617下载的chm被阻止了,有解决办法吗?

解锁 .CHM 文件并在自己的电脑上查看它是可以的。但是,此 .CHM 文件将被打包成安装程序并发送给其他用户。他们可能无法像我一样找到解决方案。所以我需要确保 .CHM 文件在他们的电脑上可读。

我跟着https://superuser.com/a/1507617通过 .ZIP 和 .RAR 文件传输 .CHM 文件。

但是在解压.ZIP 和.RAR 文件后,.CHM 文件仍然出现“未知发布者”错误和空白页。

为什么?

更新

我使用 Streams 1.6https://learn.microsoft.com/en-us/sysinternals/downloads/streams检查文件是否包含额外的流。

根据我的测试,vagon.io 上的 .CHM 文件不包含额外流。但是,如果将其直接或通过 Zip/RAR 存档下载到我的本地计算机,则会向其中添加额外流。

答案1

正如您通过问题中提供的链接已经知道的那样,有两个障碍阻止您正确使用您的CHM文件:

  1. 存储在网络位置(默认情况下为不受信任的来源)
  2. 标记为来自外部源的文件。从标记的 ZIP 文件中提取时,此标记将应用于文件。
    此标记是备用数据流命名Zone.Identifier

后者引发了您的问题。

解决方案是删除“外部”标签。

  • 这可以通过打开文件的属性并选择“常规”选项卡底部的“解除阻止”钩子来手动完成(您已经描述过)

  • 这也可以使用 Powershell 来完成:

Remove-Item -Stream 'Zone.Identifier' YourFile.chm

通过显示删除前后的流来检查是否成功:

Get-Item -Stream 'Zone.Identifier' YourFile.chm

为了方便地分发您的 CHM 文件,您需要至少提供一个最小的“安装程序”,以删除备用数据流

$fileName   = YourFile.chm
$streamName = 'Zone.Identifier'

if ($stream = $_ | Get-Item -Stream $streamName -ErrorAction SilentlyContinue) {
    try {
        Remove-Item -Stream $streamName $fileName
}
    catch {
        Write-Host "Error: $($_.Exception.Message)"
    }
}

所有这些关于文件的混乱CHM都是出于安全考虑。CHM 代码可以包含 HTML 和 JavaScript。来自不可信来源的此类代码不应在本地执行。请参阅相关问题趋势科技

因此,您应该对生成 CHM 文件的在线服务充满信心。最糟糕的情况是,您会在不知情的情况下收到恶意软件 CHM,并帮助其传播和隐藏。

相关内容