C#应用程序许可证组件和控件

时间:2011-08-05 18:39:14

标签: c# licensing software-distribution copy-protection

如果我有5台目标计算机,我将把我的应用程序安装到其中一台目标计算机上。我如何阻止用户将我的应用程序复制到其他目标计算机?

为了说清楚,我不希望他们在安装后复制我的应用程序(他们不应该从已安装的应用程序文件夹中复制我的应用程序)。问题是我现在使用Visual Studio 2010安装和部署设置和部署我的应用程序,但是任何人都可以在安装后复制我的应用程序文件夹,例如,我的应用程序文件夹(exe,DLL和资源)位于“Program Files / MyApplication” 。他们实际上可以从该文件夹复制我的应用程序并将其粘贴到其他计算机然后使用它。当然,他们可以复制它,但我认为他们不应该能够使用我复制的应用程序吗?有没有办法保护他们复制我的申请?我必须写一个额外的代码吗?

我是软件分发的新手。请指导我必须做的事情。 谢谢

5 个答案:

答案 0 :(得分:7)

您可以使用Rhino Licensing framework生成许可证文件。它有LicenseGenerator类,它有一个Generate方法。这是它的样子:

 public string Generate(string name, Guid id, DateTime expirationDate, IDictionary<string, string> attributes, LicenseType licenseType);

Generate方法采用被许可人的名称。许可证的唯一ID,可以生成为Guid.NewGuid(),到期日期和属性字典是您可以在许可证文件中存储自定义键值对的位置。

它的工作方式是,您可以在许可证中嵌入机器的信息,在验证阶段,您可以检查许可证是否属于同一台机器。这意味着您无法复制一台计算机的许可文件并将其放在另一台计算机上,因为它无法正常工作。

在许可证文件中,您可以存储以下信息:

  • 许可证的失效日期
  • 为其生成许可证的人员的姓名
  • 根据系统信息计算的哈希值

答案 1 :(得分:4)

阻止用户在多台计算机上运行应用程序的行业标准方法确实是将产品锁定到该系统的某些参数。但是,您需要考虑以下问题,以避免未来的工作或让客户感到不安。没有处理这些问题的原始系统给节点锁定带来了错误的名称,但是如果正确完成,节点锁定是不引人注目的,灵活的和安全的:

  • 您如何准确获取要锁定的系统参数?要求用户阅读/输入错误是一个常见的错误来源,例如错误地读取“1”的“l”或“O”的“0”。
  • MAC地址通常用于节点锁定,但这是一个糟糕的选择,因为MAC地址可以由许多操作系统下的管理员设置。
  • 假设您将许可证锁定到系统的多个参数。如果用户进行次要系统升级会导致其中一个更改,会发生什么?如果您的应用突然拒绝运行,他们将不会高兴。
  • 用户希望在某些时候将许可证移动到其他计算机上。你需要考虑如何支持这一点而不会成为安全漏洞。
  • 用户计算机将崩溃 - 它会发生。他们如何才能在新的/重建系统上再次运行许可证?

我们在解决方案中遇到并处理过的一些问题。希望这会有所帮助。

答案 2 :(得分:2)

我使用Infralution License Tracker。它是付费软件,但允许部分或全部应用程序的许可。它还允许在线验证的密钥验证。可以使用客户信息生成密钥,因此使用目标计算机中的信息进行注册应该是可行的。

http://www.infralution.com/licensing.html

答案 3 :(得分:0)

如果您想要它真的很容易,可以使用LimeLM。 通过试用选项进行简单的在线验证。

答案 4 :(得分:0)

您需要使用机器锁定/激活的许可证来防止这种情况发生。这样可以确保只能从一台计算机验证许可证 - 如果许可证验证失败,您可以决定采取的步骤 - 是退出应用程序,向用户显示消息,允许宽限期等等。

尝试使用支持激活/机器锁定许可的CryptoLicensing

免责声明:我为CryptoLicensing的开发商LogicNP Software工作。