0

我想知道是否有人以前遇到过这个问题,并希望有一个解决方案。我目前正在开发的程序是一个 MFC 应用程序,并且.exe由于依赖性问题而作为(无安装屏蔽)分发。我包括一个 HTML 帮助文件:.chm扩展,嵌入在资源中。当用户请求帮助文件时,它会从资源中提取为二进制文件并复制到文件系统中。FindResource, LoadResource, 和LockResource调用。提取文件后,我会这样调用ShellExecute

ShellExecute(m_hWnd, L"open", pathToFile, NULL, NULL, SW_SHOWDEFAULT);

HTML 帮助查看器启动时没有问题。但是,在某些计算机上无法查看文件中的页面。我看到“无法显示网页”消息。

我注意到两件事:

  1. 该错误仅在“您要运行此文件吗?”之后发生。当用户第一次尝试进入程序时会出现对话框。

  2. 如果 .exe 从 USB 运行(而不是从电子邮件下载),则可以查看 HTML 帮助文件

有没有人发生过这样的事情?有什么建议么?

编辑:

我正在使用ShellExecute(),因为HtmlHelp()调用给出了相同的结果。

4

3 回答 3

1

如果您检查 .chm 文件的属性(通过 Windows 资源管理器),是否会显示:
“此文件来自另一台计算机,可能会被阻止以帮助保护这台计算机”。
这将显示在“属性”窗口中“常规”选项卡的底部附近。

如果是这样,请单击取消阻止按钮。

有关详细信息,请参阅 http://blog.crowe.co.nz/archive/2007/04/13/719.aspx

于 2012-07-04T08:17:31.417 回答
1

如果您不使用 ShellExecute(),而是使用“正确”方式,通过 HtmlHelp() api 调用会发生什么?

您的 htmlhelp 文件中是否有活动内容(即 javascript)?

你最好不要解压到 .exe 所在的同一个目录。例如,当用户从网络驱动器上运行你的程序时,你会得到同样的错误(从网络驱动程序打开的 htmlhelp 文件被标记为“不受信任”) ')。

于 2012-07-04T15:21:35.733 回答
0

我能够找到解决方案。

两个安全更新导致了这个问题。以下链接概述了问题并为大多数非程序员提供了解决方案。我使用了支持页面中的示例 #2 以及Registry Reference API来解决问题。

于 2012-07-05T19:55:28.547 回答