【问题标题】:Delphi - invalid stream format errors on runDelphi - 运行时出现无效的流格式错误
【发布时间】:2012-12-07 15:44:51
【问题描述】:

Delphi 6 教授

我们有很多应用程序。这些程序的大小为 8-12 MB。

在此期间,我们多次收到有关“无效流格式”错误的报告。

我们使用共享的 Windows(或 Linux)文件夹来存储应用程序,用户可以从这些带有链接的目录中运行它们。 这意味着操作系统正在分页文件,并仅加载所需的部分。

以前我们得到 C000006 异常。 据我所知,这意味着文件分页(加载)因任何网络问题(超时等)而失败。

现在我们面临“无效流格式”错误和“无效属性 xxxx”错误。

如果我知道的话,这两个错误都是由“分页问题”引起的,但是代码中发生了C06,以及Exe的数据区域中的流错误。 但也许我知道错了……

不管怎样,这个问题很奇怪。有时我们得到它,有时我们没有。

如何避免?这些错误会阻止用户创建新对话框、使用程序...

(在其他地方,用户使用了 wifi - 然后我们得到了相同的副作用。)

也许你知道如何预防,避免这个问题。

UPX(与防病毒软件相比)? 将exe-s复制到本地?

这个客户的系统管理员是“我们的敌人”,因为他们说:“一切都好”。问题的根源无法确定...

感谢您的每一个想法:dd

【问题讨论】:

  • 第 1 步是将IMAGE_FILE_NET_RUN_FROM_SWAP PE 标志添加到可执行文件中。你这样做了吗?
  • Delphi 6 支持这个吗?还是没有?
  • 系统管理员可以查看事件日志中的应用程序崩溃条目,错误日志中会有一些文本指出可能的崩溃原因。此消息中提到了 IIRC 不稳定的网络。它不会“识别”来源,但会给出一些(希望是正确的)搜索建议。

标签: delphi networking stream paging


【解决方案1】:

假设您的分析是正确的,并且问题在于可执行文件位于连接不稳定的网络驱动器上,那么有一个解决方案。您需要在可执行文件中添加 PE 标志,强制 Windows 在运行之前将文件从网络复制到本地计算机。

确保您的 .dpr 文件的 uses 子句包含 Windows 单元。然后添加这一行:

{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}

就在 .dpr 文件中的 begin 之前。我们添加了Windows 单元,以便识别这两个常量。

【讨论】:

  • 是的。如果您想仔细检查(我知道我会!!!),请在您生成的可执行文件上使用 dumpbin /headers
  • 我找不到垃圾箱。我有Win7 Prof. 它在哪里?哪里可以下载?
  • dumpbin 来自 ms 工具链
  • 你知道任何免费的转储工具来检查 exe 头吗?
  • 是的,dumpbin。它带有快速版本的 VS、Windows SDK 等。更容易安装的可能是这个 (heaventools.com/PE-file-header_viewer.htm)。但是你真的应该在 Windows 开发机器上安装 MS 工具。
【解决方案2】:

另一种可能是使用 upx 工具打包 exe。

http://upx.sourceforge.net/

它会在运行前扩展整个文件在内存中。

而且它会节省带宽。

【讨论】:

  • 我在论坛上读到,一些防病毒软件对 UPX 很敏感,因为它只会操纵代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多