3

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

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

因此,如果在项目选项中我正在我的应用程序中处理 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 事件?

4

3 回答 3

3

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

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

于 2011-04-05T08:02:02.833 回答
2

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

这就是我的做法。

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

换句话说,借此机会开始使用 Final Builder。

于 2011-04-05T08:43:12.930 回答
0

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

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

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

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

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

于 2011-04-05T15:45:38.873 回答