2011-04-05 51 views
2

我使用Project Options/Version来管理版本信息(N.N.N.N格式)。如何在Delphi应用程序中使用项目版本信息?

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

所以,如果在项目选项我在我的应用程序中的版本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中那样,但是如何将数据传递给发布后的事件?

+0

你想要什么?防篡改?还是自动?还是方便?所有这些东西?一个很高的命令。 – 2011-04-05 15:49:23

回答

3

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

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

+0

您也可以在构建后事件中通过替换exe中的资源来完成此任务,但预生成事件看起来像是逻辑选项。由于用户使用Delphi-XE,他拥有Final BUilder,可以使用该文件和INI文件来自动构建,跳过Perl脚本。 +1 – 2011-04-05 08:17:05

+0

有点perl或python脚本,有点不对称的加密和mime64编码,你可能有一个可敬的版本欺骗预防系统。 – 2011-04-05 15:47:15

2

既然你是在Delphi-XE上,并且有了最终的构建器,为什么你不能很好地使用它,并从中构建你的“最终”版本呢?它可以给出一个非常好的解决方案,版本号问题,并可以做lot更多。

下面是我该怎么做。

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

换句话说,趁机开始使用最终生成器。

+0

这些都是很好的一点,但是OP似乎比构建自动化更关心防篡改功能。 – 2011-04-05 15:46:35

0

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

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

你的问题似乎基本上是一个阻止用户一旦确定它就修改(容易)版本号的问题。

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

我已经使用了DCPCRYPT这样的东西。但是,如果你希望成为防黑客,那就让我说出来。任何你能做的事,黑客都可以撤消。如果你想更安全,你还需要篡改整个应用程序。有商业防篡改解决方案,但没有任何工作与德尔福突破。

相关问题