我在 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
文件:
- 存储在网络位置(默认情况下为不受信任的来源)
- 标记为来自外部源的文件。从标记的 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,并帮助其传播和隐藏。