【问题标题】:Need to create a compiled delphi app that can make a separate compiled app需要创建一个编译好的delphi app,可以单独编译app
【发布时间】:2010-08-30 05:33:51
【问题描述】:

我需要制作一个应用程序,让用户选择一些选项,单击一个按钮,然后创建一个单独的编译应用程序。这可能吗?我正在使用 delphi 7 和 2010。

感谢您的回复。这是更多信息。

它必须是一个图形应用程序并创建一个图形应用程序。

我想要的是用户启动“App A”(我最初制作),能够选择一些选项(我为保密道歉。我认为这是一个百万美元的想法,可能 3 个人可能会觉得有用:) 然后使用该程序创建“App B”。然后可以将“App B”分发给最终用户,“App B”是一个单一的可执行文件,其中包括已编译的应用程序和配置数据。我不在乎如何,但我需要将“App B”作为单个可执行文件。

我什至不需要为最终编译的应用程序使用 Delphi。如果我可以从 Delphi 调用某种“伪编译器”,它将预编译的 exe 和单独的配置文件结合到一个可执行文件中。这样也可以。

感谢您的回复和帮助。

谢谢。

【问题讨论】:

  • 如果您需要为第二个应用程序生成代码:我在 DelphiLive 期间做了一个关于此类事情的演示!下周初回荷兰时,我会上传演示源代码。
  • 你应该解释你想要创建什么样的应用程序。控制台/gui,琐碎/复杂,...?
  • 请记住,Delphi 编译器不能分发——也不能分发它的库。用户需要拥有 Delphi 的合法副本,或者您需要编写自己的编译器(和库)
  • 什么样的选择?您是否真的需要发出不同的代码,或者如果您只是将选项硬编码到应用程序中并且应用程序对这些值做出反应就足够了吗?换句话说,您是否需要编译它
  • Karlson,我不需要编译的应用程序,但我确实需要一个可执行文件。因此,如果有某种方法可以在单个 exe 中将 exe 与配置文件结合起来,那就没问题了。如果可能的话。谢谢。

标签: delphi delphi-2010 delphi-7 compiled


【解决方案1】:

我也遇到过类似的情况。我必须使用我的 exe 生成一个 exe。由于复杂性和许可证问题,我不想编译源代码。

让我们调用父应用 P 和子应用 C。还假设 C 需要的任何选项都可以总结在一个配置文件(XML/INI 等)中。我最终做的是:

  1. 创建P和C。在P的资源数据中插入C。
  2. 当用户在选择选项后单击按钮时,P 将从其资源数据中提取 C。
  3. 创建了一个包含用户选择的选项的 XML 文件,并将其插入到 C 的资源数据中。

所以每当 C 运行时,它将使用填充在 其中 的 XML 文件中给出的选项。它看起来既复杂又笨拙,但可靠且简单。 google一下“delphi在exe中嵌入资源”,上面有很多文章可以做。

【讨论】:

  • 如果您可以涵盖所有选项,这是一个不错的选择。在大多数情况下可能是可行的。不是他想要的,而是一个好的建议和一个好的选择。
  • @Runner,大卫没有说他需要能够编译源代码。他说他需要制作一个编译好的应用程序。如果他从一个已编译的应用程序开始,复制它并修改其资源部分,那么他最终将得到另一个已编译的应用程序,这正是他所要求的。我怀疑大卫的意思是让其他人推断该程序需要与用户一起在现场编译,尤其是当他没有提到任何类型的代码生成并且唯一的用户输入是“选择一些选项”时。
  • 对。我想要的是用户启动“App A”,能够选择一些选项(我为保密道歉。我认为这是一个百万美元的想法,可能 3 人可能会觉得有用:) 然后使用程序创建“应用程序 B。”然后可以将“App B”分发给最终用户,“App B”是一个单一的可执行文件,其中包括已编译的应用程序和配置数据。我不在乎如何,但我需要“App B”是一个可执行文件。感谢您的回复和帮助。
  • @Rob ,我看你是对的。英语不是我的主要语言,所以我错过了。我还是应该读得更好:)
  • @David,看看UpdateResource API 函数。
【解决方案2】:

这是可能的。您需要在目标机器上安装一个 Delphi 7(或兼容的)编译器(至少是命令行)。您还需要已编译应用程序的所有源代码,其中包括所有第三方库(如果您使用的话)。

当您完成所有设置后,只需使用正确的参数和路径调用命令行编译器 (DCC32.EXE)。

您可以使用两种方法:

  • 调用 ShellExecute
  • 调用 CreateProcess

您将通过 CreateProcess 更好地控制执行。如果您打算以这种方式使用编译器,您还必须注意法律问题和许可。

【讨论】:

    【解决方案3】:

    鉴于 Delphi 编译器无法重新分发,如果用户没有 Delphi 的副本,一种解决方案可能是使用脚本引擎(即 RemObjects PascalScript,但还有其他),为其生成代码并嵌入该代码(即在资源中)在一个可执行文件中,将在启动时执行。

    【讨论】:

    • 而且PaxCompiler实际上可以编译可执行文件甚至包,值得一试。
    【解决方案4】:

    创建一个单独的存根可执行文件来实现您需要的所有逻辑,并从其自己的本地资源中读取其配置(查看 TResourceStream 类以帮助您在运行时加载资源)。​​

    在编译时将该存根可执行文件作为 RCDATA 资源包含在主应用的资源中。

    在运行时,主应用可以在需要时从其资源中提取存根可执行文件,将其保存到磁盘,然后使用 Win32 API UpdateResource() 函数将必要的配置数据插入存根的资源中。

    【讨论】:

      【解决方案5】:

      在不了解您认为需要这样做的原因的情况下,我假设您实际上并不需要这样做。考虑到规定的要求,我只需要一个用 Delphi 编写的应用程序,它会查找配置数据(.ini 文件、注册表等)的存在。如果没有,它会显示一个屏幕,“将让用户选择一些选项,单击一个按钮”。然后将选项存储在 .ini 文件中,程序的其余部分继续使用这些选项。

      或者,我会使用一些 Pascal 脚本,例如 TMS 提供的。

      如果您正在寻找一种方法来制作应用的自定义品牌版本,可以使用 Inno Setup 和 ResHacker 步骤。即在 Inno 中收集需求,将你的 .exe 吐出到临时目录,使用 ResHacker 修改 .exe,将其复制到程序文件夹中。

      【讨论】:

      • 我可能不必创建第二个可执行文件,但我需要以某种方式将该配置文件包含在可执行文件中。谢谢你的回复。
      • @David,那么 ResHacker 可能会为您解决问题。即将配置作为资源字符串注入 .exe。
      • 真的必须嵌入还是可以使用加密的配置文件来防止干预?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多