【问题标题】:(Delphi 7) I can't run my program executable on non-Delphi PCs?(Delphi 7) 我不能在非 Delphi PC 上运行我的可执行程序?
【发布时间】:2016-05-10 20:33:21
【问题描述】:

我正在制作一个 Delphi 应用程序,并想在另一台 PC 上对其进行测试,看看是否一切正常。当然,我编译并构建了可执行文件,并将所有文件从 Project 文件夹转移到另一台 PC。当我在 PC 上启动 .exe 文件时,什么都不会发生。然后我在项目选项中勾选了“使用运行时包构建”选项:

这使 .exe 从大约 300 KB 变为大约 30 KB,但现在,该 PC 无法在另一台(非 Delphi)PC 上启动该应用程序,而是出现错误,指出它缺少所需的各种文件打开.exe。

我把同样的东西发给了不同的朋友,都报告了同样的问题。 我的应用程序是一个相当简单的彩票原型应用程序,所以我不明白为什么我无法在其他 PC 上打开它。我需要启用其他特殊选项才能使其正常工作吗?

【问题讨论】:

  • 您需要将各种丢失的文件与可执行文件一起发送。
  • 有没有一种简单的方法可以找出我需要包含在我的可执行文件中的文件?因为如果没有,我将不得不从一台 PC 转到另一台 PC,并找出哪台 PC 缺少运行我的可执行文件的文件。
  • 按图片上的“帮助”按钮,选择“另见”,选择“运行时包”,然后选择“决定使用哪些运行时包”。阅读主题应该会有所帮助。
  • 无论如何,不​​要将运行时包用于简单的、一个可执行的应用程序。对于模块化的应用程序来说,它很方便。
  • 只需删除复选框并重新构建。现在你的代码应该可以工作了。 (除非还有其他我们不知道的 dll)。

标签: delphi runtime exe delphi-7


【解决方案1】:

当您使用运行时包时,您需要分发这些包。这些是您的程序链接到的.bpl 文件。它将是屏幕截图中 运行时包 编辑框中列出的包的子集。您应该只列出您使用的软件包。

这样做的最终结果是,您必须分发的总量远大于单个单体可执行文件。因为在单片可执行文件中,可以剥离未使用的代码。如果您想最小化程序的大小并让生活变得简单,请不要使用运行时包。

值得阅读 Embarcadero 的文档:

Working with Packages and Components

【讨论】:

  • 对运行时包的出色解释,但启用运行时包给 op 带来了不同的问题。他需要取消选择使用运行时包构建并修复 Deltics 回答的原始问题
  • @Remko 我没有意识到这一点。显然,我们需要更多信息来说明这一点。
【解决方案2】:

解决第一个问题。

使用运行时软件包并不能解决您的 EXE 无法在某些 PC 上运行的问题。它所做的只是增加了部署应用程序的复杂性(如您所见)。

除非您出于其他特定原因需要运行时包,否则使用它们会好得多,尤其是如果您不理解它们(根据您描述发现的方式)老实说,他们似乎确实是这样)。

集中精力找出为什么您的应用程序不能作为单个独立的 EXE 运行

由于涉及运行时包的所有问题,您的 EXE 目前甚至还没有达到运行您的应用程序代码的地步,这可能是您最初的问题所在。这意味着一旦您解决了运行时包创建的所有问题,您仍然会留下一个无法运行的 EXE。即你原来的问题。

您的应用程序启动时会做什么?它是否尝试从任何特定位置加载文件?那些地点是什么?文件是什么?您是否使用任何第三方库,这些库可能期望 DLL 或其他外部文件存在?您是否正在尝试读取或写入注册表或任何外部文件(INI 文件等)的设置。

您尝试运行的操作系统是什么?对于使用旧版 Delphi 编译的应用程序,这可能是一个非常重要的问题。您是否尝试过将 EXE 配置为在旧版本 Windows 的兼容模式下运行? (您在 Windows 本身中执行的操作,而不是在编译 EXE 时执行的操作)。

这些是您应该关注的问题。 不是运行时包。

【讨论】:

    【解决方案3】:

    生日,

    Dependency Walker 是一个已经存在了一段时间的小工具,可以帮助您解决这个问题。您可以在http://www.dependencywalker.com 找到它。它不止一次帮助了我。这将告诉您哪些文件(通常是其他响应中所述的 BPL)需要与您的 EXE 一起发送。

    还可以查看 NSIS 以创建一个简单的安装程序,并将您的 EXE 和支持的 BPL 以及任何其他文件放在同一目录中。

    【讨论】:

    • IDE 本身会识别需要哪些运行时包,从而提供支持的 BPL 列表,而无需借助第三方工具。
    • @KenWhite 在哪里可以找到这样的列表?据我所知,没有任何简单的方法可以确定应用程序具有哪些 bpl 依赖项。
    • @J.Pelttari:打开运行时包。构建(而不是编译)您的应用程序。 Project->Information 列出了所需的运行时包文件 - 右侧,标记为 Packages used 的部分。
    猜你喜欢
    • 2016-02-07
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    相关资源
    最近更新 更多