【问题标题】:Prepare exe for distribution准备 exe 进行分发
【发布时间】:2012-08-05 16:08:06
【问题描述】:

请问可以请教一下吗?

Development machine – Windows 7  64bit
IDE – Delphi 7 pro (with 7.1 update)
Target machine for install – Windows XP (SP3) – NB this is the Win 7 Virtual Machine

我已经构建了一个小型应用程序,只不过是一个测试应用程序。一个网格,一个连接到 MS accdb 文件的 TADOConnection 和一些 TADOTables。使用 Inno Setup 我还构建了一个安装程序。我保证,这是一个非常简单的应用程序。

当我在 XP 虚拟机上安装“应用程序”时,一切都按计划进行,即没有错误消息并且安装程序完成。但是,应用程序不会启动。在同一个 XP VM 上,我安装了 D7,但奇怪的是,如果 IDE 正在运行,我的应用程序将毫无问题地启动。如果我关闭 IDE,我的应用程序将无法重新启动。

我得到的只是一两秒的沙漏,仅此而已……没有错误消息,没有可怕的 MS 对话框询问我是否要向他们发送有关此可怕应用程序的信息,实际上我没有得到任何反馈。

NB - 无论是从 IDE 运行,还是在 IDE 外部运行,在 Win 7 机器上,应用程序都运行良好。

我显然错过了一些非常明显的东西,但我迷路了。我什至尝试过……。

program Project1;
uses
  Dialogs,
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}
begin
  Application.Initialize;
  ShowMessage('Starting');
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

但我没有看到 ShowMessage 对话框。

我已经阅读了许多“Hello World”教程。从慷慨的 SO 贡献者那里收集了大量知识(谢谢)。但是必须有另一个教程教我如何“准备”我的应用程序以包含在安装程序中。我想如果我取消选中项目选项中的“使用运行时包构建”,然后执行项目 > 项目构建,我可以构建一个文件,其中包含在 IDE 之外运行应用程序所需的一切。

请问谁能指点我拼图的最后一块?

顺便说一句,有没有办法在 IDE 之外调试可执行文件?也许 Delphi 中的某些开关会在应用程序启动时生成一个日志文件……或尝试这样做。

感谢您的宝贵时间?

问候, 约翰。

编辑 - 我之前提到该文件将在我的 W7 机器上的 IDE 之外运行。我弄错了……除非 D7 也启动并运行,否则它不会运行。此外,我制作了包含此文件的原始文件夹的副本,并开始弄乱项目选项开关。突然,新文件的大小是原来的两倍,并且运行正常。问题...我无法复制我在原始文件/项目上所做的任何更改,以确定我所做的是原因/修复。

编辑 2 - 好的 - 问题肯定与不同的文件大小有关。我在 XP 卷上创建了一个文件夹,并从 Win 7 Delphi 安装中的输出目录中删除了我所有 BPL 的副本。将我的 exe(不会在 IDE 之外运行的文件)以及我的 accdb 文件放在其中。双击并...嘿 Presto - 它运行。网格显示了我的示例数据……很漂亮。

事情是这样的...项目>选项>包>使用运行时包构建未选中。这应该为我构建一个大的 exe 文件 - (是正确的)但它构建了一个需要 BPL 的相对较小的 exe !!!!

将进行更多测试...

【问题讨论】:

  • 我还应该提到我也在 XP 卷上安装了 AccessRuntimeEngine。约翰。
  • 您是否使用任何试用版组件。它们有时被设计为仅在 IDE 中运行。
  • @David Heffernan。谢谢你的想法,大卫。我实际上已经想到了这一点,因为我有一个 EurekaLog 试用版。我没有从 IDE 中卸载它,但我已经从项目中禁用了它。我想我需要退后一步,构建另一个示例应用程序,一次添加一个组件,并每次测试安装文件。我有一种可怕的感觉,这将是一件很容易解决的事情。 PS 除了 EurekaLog,Win 7 IDE 今天是全新安装的。
  • 这与您的安装程序无关,尤其是在您不使用运行时软件包的情况下。 Delphi 应用程序确实是独立的;除了少数例外,它们可以通过简单的xcopy“安装”。很难说可能出了什么问题。您可能正在使用第三方组件,该组件使某些 API 调用在 XP 上不受支持,或者在内存中做了一些 XP 无法捕获的奇怪事情。至于调试它,如果您在开发机器和您尝试运行的 VM 之间有 TCP/IP,则可以使用远程调试。请参阅remote debugging 的文档。开始工作有点困难。
  • @Johnny:对你第一次提出的问题表示赞同,因为它的质量。显然,您已经在这里潜伏了一段时间,并且了解何时以及如何提出问题。欢迎来到 SO!

标签: delphi


【解决方案1】:

您的 tconnection 可能在 ide 中已连接。

这让您可以看到在 IDE 中使用真实数据时的情况,但是现在当您运行应用程序时,它会在开始时尝试连接,而当时可能还没有正确设置所有内容。

一种可能的解决方案:让连接组件断开连接,然后在稍后阶段连接,例如通过“连接”按钮。

至少这样正确处理异常会更容易。

【讨论】:

  • 在这种情况下你会得到一个例外。您的应用不会在没有警告的情况下消失。
  • 谢谢 Wouter,但没有。我构建连接字符串并在 FormCreate 中打开它。正如@Ken White 提到的那样,当我犯这个错误时,我得到了一个例外。
  • @Ken 他可能有连接,但如果 VCL 尚未初始化并且连接无法显示 GUI 窗口,它可能会静默。例如,尝试在单元初始化部分引发异常。
  • @Arioch'The:除了 VCL 的异常处理程序在它到达从 .DFM 流式传输组件之前很久就设置好了,所以这是不可能的。没有迹象表明正在初始化部分中设置数据库连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
相关资源
最近更新 更多