我正在制作一个Delphi应用程序,并希望在另一台PC上测试它,看看是否一切正常。我编译并构建了可执行文件,当然我将所有文件从Project文件夹传输到另一台PC。当我在PC上启动.exe文件时,什么都不会发生。然后我勾选了#34; Build with runtime packages"项目选项中的选项:
这使得.exe从大约300 KB增加到大约30 KB,但是现在,该PC没有能够在另一台(非Delphi)PC上启动该应用程序,而是发现错误,说它缺少所需的各种文件打开.exe。
我把同样的事情发给了各个朋友,所有人都报告了同样的问题。 我的应用程序是一个相当简单的彩票原型应用程序,所以我不明白为什么我在其他PC上打开它时遇到问题。我需要启用其他特殊选项吗?
答案 0 :(得分:8)
使用运行时包时,需要分发这些包。这些是您的程序链接到的.bpl
个文件。它将是屏幕截图中运行时包编辑框中列出的软件包的子集。您应该只列出您使用的包。
这样做的最终结果是,您必须分发的总量远远大于单个整体可执行文件。因为在单片可执行文件中,可以剥离未使用的代码。如果您想最小化程序的大小,并简化生活,请不要使用运行时包。
阅读Embarcadero的文档是值得的:
答案 1 :(得分:4)
解决第一个问题。
使用Runtime Packages无法解决您的EXE无法在某些PC上运行的问题。它所做的就是增加部署应用程序的复杂性(正如您所发现的那样)。
除非您出于其他特定原因需要运行时软件包,否则使用它们远远好于 NOT ,特别是如果您不理解它们(基于您描述的方式已发现)如果我们诚实的话,他们似乎确实如此。
专注于找出您的应用程序不能作为单独的独立EXE 运行的原因。
由于所有涉及运行时包的问题,您的EXE目前甚至没有达到运行您的应用程序代码的程度,这可能是您最初的问题所在。这意味着一旦解决了Runtime Packages创建的所有问题,您将继续使用不运行的EXE。即你原来的问题。
应用程序在启动时会执行什么操作?它是否尝试从任何特定位置加载文件?这些地点是什么?有什么文件?您是否正在使用可能存在DLL存在的任何第三方库或其他外部文件?您是否尝试读取或写入注册表或任何外部文件(INI文件等)的设置。
您尝试运行的操作系统是什么?对于使用较旧的Delphi版本编译的应用程序,这可能是非常重要的问题。您是否尝试将EXE配置为在旧版Windows的兼容模式下运行? (你在Windows中做的事情,而不是在编译EXE时)。
这些是您应该关注的问题。 不运行时包。
答案 2 :(得分:2)
g·天,
一个小工具已经存在了一段时间来帮助你解决这个问题,这是Dependency Walker。您可以在http://www.dependencywalker.com找到它。它不止一次帮助了我。这将告诉您需要使用EXE发送哪些文件(通常是其他响应中所述的BPL)。
另请查看NSIS以创建一个简单的安装程序,并将您的EXE和支持BPL以及任何其他文件放在同一目录中。