如何在Delphi应用程序中使用项目版本信息?

时间:2011-04-05 07:45:01

标签: delphi delphi-xe versioninfo

我使用项目选项/版本来管理版本信息(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事件呢?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

由于您使用的是Delphi-XE并拥有Final Builder,为什么不充分利用它并从中进行“最终”构建?它可以为版本号问题提供一个非常好的解决方案,并且可以做更多批次

我是这样做的。

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

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

答案 2 :(得分:0)

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

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

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

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

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