2012-04-02 54 views
4

使用:ayende rhino licensing构建一个小型winforms应用程序。许可证工作正常,我可以创建许可证并按照我的选择分发它们。特定于计算机的Winforms许可

问题是,如何让每个许可证只在一台机器上工作?我知道ayende的项目中有一个名为LicensingService的类,我相信这个类可以做我想做的事情,但我只是无法弄清楚。我做了相当多的搜索,并且找不到除this one之外的任何教程。

也许有人已经实现了这一点,或者有一些关于如何完成这一任务的提示?如果有帮助,我可以访问网络服务器。

任何帮助一如既往,非常感谢。

回答

1

取决于你想要怎么讨厌,使之成为你的用户是诚实的。您可以实现一个HWID(请参阅How to fast get Hardware-ID in C#?关于如何生成它们),这些HWID在系统间是唯一的,然后让程序检查HWID是否与在线存储的HWID相匹配(通常通过使用数据库)。

不用说,这将使您的应用程序需要互联网连接才能运行,这可能会让您的用户感到沮丧。

或者你可以合并HWID和序列号,并让你的应用程序执行相同的操作来验证它们是否匹配,但这很容易被普通黑客破解。

在这一天结束时,就安全性而言,.net并不是最好的,因为您可以根据需要轻松获取源代码并修改程序集以修补某些保护措施。在决定要采取什么路线来保护软件时请记住这一点。

+0

感谢您的回复,这听起来像个好主意。我会试一试,我意识到.net并不是最好的安全软件,但我只想阻止用户将应用程序从机器复制到机器,并且它仍然可以正常工作。再次感谢。 – JDx 2012-04-02 12:16:06

1

我不知道什么是犀牛牌。为了解决您的需求,通常有两种方法。

  1. 将一些随机生成的密码提供给客户机,并在服务器中维护一个密码池。每次输入密码在本地机器上注册应用程序时,都要通过互联网连接到您的服务器来检查它是否已在其他地方注册。

  2. 或者,我们要做的是,生成一个对该机器唯一的代码(也许是一些独特的机器ID,例如MAC ID),并让客户端发送给您。然后您将重新编码代码并使用some logic发回。现在,当客户端将代码输入到他的机器时,执行相同的操作:获取机器ID,使用相同的some logic执行相同的重新哈希,并检查它是否匹配。

我想不出别的

+0

感谢您的回复。数字1听起来像是这个特定应用程序的最佳解决方案,我打算将它与denied66的答案结合使用。 – JDx 2012-04-02 12:16:51

+1

@JDx我想你错过了这一点。 denied66接受的答案与我的第二个选项相同。你如何使用选项1和2来解决你的问题? – nawfal 2012-04-02 12:35:19