【问题标题】:How to use project version information inside a Delphi application?如何在 Delphi 应用程序中使用项目版本信息?
【发布时间】:2011-04-05 07:45:01
【问题描述】:

我使用项目选项/版本来管理版本信息(N.N.N.N 格式)。

无论如何,在我的项目中,我都会复制这些信息。

因此,如果在项目选项中我正在开发 2.4.3.178 版 在我的应用程序中,我有 4 个包含 4 个数字的整数变量。

我手动设置它们

Major := 2;
Minor := 4;
Release := 3;
Build := 178;

原因很简单:我有基于版本号的许可。因此,如果用户购买了“2.4”版本,则不允许升级到“3.0”版本。

但如果我依赖项目版本信息,用户可以(使用 Resource Hacker 工具)更改版本信息,从而“激活”产品。

用户不能以相同的方式更改这 4 个变量(至少不那么容易)。

这可行,但迫使我复制信息。

您能提出更好的方法吗?

否则说:有没有办法使用我在这 4 个变量中写入的数据来写入版本信息。类似于 Post Build Events 中的内容,但如何将数据传递给 post build events?

【问题讨论】:

  • 你想要哪个?防篡改?还是自动的?还是方便?所有这些东西?一项艰巨的任务。

标签: delphi delphi-xe versioninfo


【解决方案1】:

您需要构建前事件而不是构建后事件,因为您希望在链接之前构建 .res 文件。

我用一个简单的 Perl 脚本做了一些非常相似的事情,该脚本读取包含版本号常量声明的包含文件 (.inc)。我使用正则表达式读取它们,然后创建传递给 brcc32 的 .rc 文件。这都是作为预构建操作调用的。

【讨论】:

  • 您也可以通过替换 exe 中的资源在构建后事件中执行此操作,但预构建事件似乎是合乎逻辑的选择。由于用户使用的是 Delphi-XE,他有 Final BUilder,可以使用它和一个 INI 文件来自动构建,跳过 Perl 脚本。 +1
  • 一点 perl 或 python 脚本,以及一点不对称加密和 mime64 编码,您可能拥有一个值得尊敬的版本欺骗预防系统。
【解决方案2】:

既然您使用的是 Delphi-XE 并拥有 Final Builder,为什么不好好利用它并从中进行“最终”构建呢?它可以很好地解决版本号问题,并且可以做很多事情。

这就是我的做法。

  • 设置一个包含版本信息相关部分的小 INI 文件。
  • (可选)制作一个小型 Delphi 表单应用程序,该应用程序从 INI 文件中读取版本号并让您有机会更改它。将更改保存到 INI 文件时,delphi 应用程序应自动生成一个小的 Delphi PAS 文件来定义常量!
  • 创建一个执行以下操作的 FinalBuilder 项目:
    • 调用您的 Delphi exe 来设置版本号。您将负责更改任何需要更改的内容,这可能是合适的,因为您的许可方案取决于版本信息。
    • 设置一些项目变量来保存版本信息号
    • 添加“读取 INI 文件”操作以将版本信息从 ini 文件读取到您的项目变量中。
    • (可选)构建单元测试项目,如果有的话。
    • (可选)调用单元测试项目。
    • 添加一个“构建 Delphi 项目”操作,将其设置为使用您需要的任何选项构建 您的 项目。添加一个小的“之前”脚本,将版本信息编号设置为您刚刚从 INI 文件中读取的项目变量中的内容。
    • (可选)使用您使用的任何工具创建安装包。
    • (可选)将这些设置包上传到网站。

也就是说,抓住机会开始使用 Final Builder。

【讨论】:

  • 这些都是好点,但 OP 似乎更多地询问防篡改而不是构建自动化。
【解决方案3】:

将您的版本号移动到代码中也很容易解决。

传递信息的一种方法是以编程方式生成 version.rc 文件(您自己使用 delphi 或您选择的脚本语言编写一个小型构建工具),并将资源链接到程序,而不是使用构建的在版本信息功能中。

您的问题似乎从根本上说是防止用户在您确定版本号后(轻松地)修改它。

所以我的建议是您加密版本号并使用加密版本,而不是 VersionInfo 结构中的版本。

我已经将 DCPCRYPT 用于这样的事情。但是,如果您希望防黑客,我就这么说吧;你能做的任何事情,黑客都可以撤消。如果您想更安全,您还需要对整个应用程序进行防篡改。有商业的防篡改解决方案,但没有一个能与 Delphi 一起出色地开箱即用。

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 2010-10-20
    • 2015-09-16
    • 1970-01-01
    • 2011-03-07
    • 2019-10-15
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多