我使用项目选项/版本来管理版本信息(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事件呢?
答案 0 :(得分:3)
您需要预构建事件而不是构建后事件,因为您希望在链接之前构建.res文件。
我使用简单的Perl脚本执行非常类似的操作,该脚本读取包含版本号常量声明的包含文件(.inc)。我使用正则表达式读取它们然后创建我传递给brcc32的.rc文件。它都是作为预构建动作调用的。
答案 1 :(得分:2)
由于您使用的是Delphi-XE并拥有Final Builder,为什么不充分利用它并从中进行“最终”构建?它可以为版本号问题提供一个非常好的解决方案,并且可以做更多批次。
我是这样做的。
换句话说,借此机会开始使用Final Builder。
答案 2 :(得分:0)
将版本号移动到代码中也很容易解决。
传递信息的一种方法是以编程方式生成一个version.rc文件(您自己使用delphi或您选择的脚本语言编写一个小型构建工具),并将资源链接到程序,而不是使用构建在版本信息功能。
您的问题似乎从根本上是阻止用户在确定后轻松修改版本号。
所以我的建议是你加密版本号并使用加密版本,而不是VersionInfo结构中的版本。
我使用DCPCRYPT这样的事情。但如果你希望能防黑客,那我就说吧;你可以做任何事情,黑客可以撤消。如果您想要更安全,您还需要篡改整个应用程序。有商业防篡改解决方案,但没有一个与Delphi一起开箱即用。