像许多现代软件公司一样,我的公司使用产品密钥来检查用户对某个软件的合同。解析产品密钥时,我可以检查某人拥有什么类型的产品(试用版/完整版等)。我们希望用户能够从代码库的免费版本升级到付费版本,并希望能够检查产品密钥是否有效的试用版。
试用版不包含完整版的所有代码。使用算法检查产品密钥(它不使用 Web 服务或类似的东西),因此可以非常快速地完成。
这里有两个子问题:
- 从试用版到完整版。我正在考虑通过 MSI 升级解决这个问题,但不确定如何实现。(使用 WIX)
- 制作一个包含额外代码的试用版,用于检查它是否是试用版。我知道使用#if 语句可以做到这一点,但我想知道是否也可以更改 DLL - 更准确地说:为检查试用版的每种类型添加静态构造函数。
我的问题是:这是正确的方法吗?如果是这样,是否有实现这种功能的标准方法(或工具)?如果没有,最好的方法是什么?
更新
到目前为止,感谢您提供的所有出色答案。我认为是时候根据答案来解释更多的背景了——幸运的是,我们似乎或多或少地走在了正确的轨道上。
对于我们的产品,将其安装在私有(非互联网连接)VLAN 上是有意义的,这样就可以使用产品密钥......我真的不想像“电话激活”那样麻烦微软做到了:-)。因此,正如建议的那样,我目前正在使用加密一些数据的产品密钥,这些数据被解密以查看密钥是否对给定产品有效。当然,我可能是软件盗版的受害者,但我想我们现在将其视为一种“营销工具”。
正如其中一个答案所建议的,我目前正在生成多个 MSI 文件:一个用于 x64,一个用于 x86。然后是试用版、完整版和蓝图版。总共有 6 个 MSI 文件 (pfff)。在进程混淆过程中,会发生强命名和代码签名。蓝图版本包括完整的源代码。
我比较关心试用版。当然,我可以在这里和那里添加一些检查,但我宁愿自动在每个类中放置检查...我想过复制所有 CS 文件并添加/更改静态 c'tors (f.ex.使用 cecil 或 nrefactory .. 或只是几个正则表达式 ...)。在我看来,我不是唯一想要这个的人。必须有更好的方法,对吧?
此外,我真的不想考虑更新和升级,因为这似乎是在重新发明 MSI 轮子。从试用版到完整版在我看来像是 MSI 升级,就像完整版到蓝图版感觉像是 MSI 升级。但是,结合正常升级,我担心这是否可能?