1

您好我目前正在开发一个 .NET 库(不是控件),并考虑如何提供组合的“开发”和可自由运行时可部署的许可方案来使用它。

我正在考虑开发人员许可,某种节点锁定会很好(文件和/或服务器/Web服务),但我希望允许开发人员在运行时自由分发我的软件。

我在徘徊,如果对于运行时许可证,最好将许可证密钥的 MD5 哈希值、调用程序集(或可执行文件/模块 - 不确定)的公司信息,或者它自己的信息作为其中的一部分强名称哈希键?

这意味着我的用户每次发布/分发他们的软件时都必须生成运行时许可证,但我认为这不应该太繁重。这可以通过有效的开发/构建许可/节点锁定机器完成,使过程非常简单和轻松。

这是现阶段的一个想法。我很想听听人们对这个想法的任何想法。

4

4 回答 4

3

关于这个的一些想法:

  • 我相信是乔尔·斯波尔斯基(Joel Spolsky)指出,您必须使获得许可证比破坏(抱歉)“解决”软件的许可机制更容易。作为开发人员使用过节点锁定软件后,这可能会让人感到痛苦,尤其是如果您拥有多台机器。也许看看基于用户的许可(即,我的用户在他们的个人资料中的某处有一个单一的许可,如果它尚未使用,那么无论你在哪台机器上都可以使用它)。
  • 我预见到您的双重许可方案存在问题,即拥有无限运行时许可证,但仍需要同一库的每座开发人员许可证。例如,是什么阻止了开发人员为他们的开发目的“许可”运行时?
  • 执行是另一个问题。您如何确定您的客户是否违反了您的许可协议?拥有图书馆“电话回家”很可能会排除它在许多公司的防火墙环境中的使用。
  • 你需要为这个计划投入多少精力?你能买一个吗?您能否利用这段时间来改进您的图书馆,以便您的客户购买升级版?
  • 如果有任何类似的图书馆,请检查它们是否有任何形式的复制保护。如果没有,请立即忘记它,因为您将以这种方式将销售交给您的竞争对手。
于 2009-02-20T13:53:08.370 回答
1

每个人都讨厌许可,那么为什么不使用他们在代码中的一个对象上设置的简单许可密钥呢?

YourNamespace.Licensing.SetLicenseKey(193421340982384);

我不会要求他们为每个构建重新创建许可证密钥,这会很乏味。但是,您可以这样做,以便您提供给他们的许可证密钥可以转换为公钥令牌,然后您可以查看它是否与调用您的代码的程序集的公钥令牌匹配。

于 2009-02-20T13:43:29.483 回答
1

感谢所有人的想法和评论。

是的,需要考虑一些好点。

进行讨论;

我不是想在这里开发一个无敌的许可系统(这可能是不可能的,我不想使用加密狗等),我正在开发自己的单人项目,所以花 3000 美元买了一个现成的解决方案永远不会发生。

我只是想阻止它很容易将许可证发送给另一个开发人员或使用一个许可证而不是 5 个许可证“逃脱”。合法用户会付钱,但有决心的人无论如何都会绕过它,所以我不会费心去阻止他们。我有点认为无论如何都应该有一种“开发者荣誉”的氛围——剥削你的开发者伙伴是 IMO 的恶业。尼亚耶夫?大概。

作为对使用开发者运行时许可证的开发人员的回答。我可能在这里遗漏了一些东西,但这个想法是,当他们的软件准备好交付时,客户会生成一个运行时许可证密钥 - 即构建并准备好 - 这使得许可证应用程序被锁定,而不是用于开发应用程序的机器锁定开发人员许可证密钥。

我在想的许可证只是一个随库分发的文件,因此可以根据需要在开发和运行时之间切换。我的许可证代码将能够判断它是哪种许可证类型(许可证文件中加密块中的 dev/rt 指示符?)

必须通过从我随软件提供的工具调用密钥发布 Web 服务来激活/创建开发许可证密钥。用户将提供一些信息,例如姓名和电子邮件地址。该工具将采用特定于机器的东西。所有内容都被发送到 Web 服务,该服务返回一个包含个人信息(原始文本副本?)的许可证文件和一个哈希(然后是 SHA,而不是 MD5!)

在运行时,我的库加载许可证密钥文件(开发或运行时),并相应地验证许可证(验证其运行的节点或调用它的应用程序)。我可以允许用户代码按照建议调用,传递许可证密钥文件流。

这会奏效还是我真的疯了?

干杯。

于 2009-02-20T14:36:16.907 回答
0

如果您告诉我们图书馆的实际用途,将会有所帮助!但我建议的一种方法是从 System.ComponentModel.Component 类继承库。这将使您的库可以访问属性 DesignMode,这使您可以区分它是在 Visual Studio 设计器中运行还是在运行时运行。然后,只有当组件在设计器中运行时,您才可以强制执行您的许可证,也许在构造器中。.

if(this.DesignMode){
///Do your check here
}

关于许可本身,您可以从本文链接文本中获得很多信息

当然,如果不知道您的库是做什么的,很难知道这是否是正确的方法,但如果它类似于托管在设计器表面上的 DataSet,则这种方法可能需要进一步研究

于 2009-02-20T14:33:15.450 回答