如何为一个WPF Windows应用程序获得许可证

21

我开发了一个小应用程序,想尝试销售,但不知道如何最好地进行。

  1. 如何锁定程序以供试用?

  2. 如何处理支付?

考虑到我只是一个人,没有太多的资金,希望找到一种免费或低成本、有效、安全且易于实现和维护的解决方案。这对我来说并不是很熟悉,因为我通常为公共部门开发解决方案,他们会整体购买解决方案,我们从未授权过。

非常感谢您的任何帮助。

B

4个回答

38

我可以告诉你我是如何做到的。免责声明:结果可能有所不同。这适用于防止简单的WinForms、WPF或其他桌面应用程序的非正式盗版情况。它对抗复杂的破解并不特别强大或安全,但它在防止非正式盗版方面表现出色。

  • 在许可证方面,我尝试了几个第三方解决方案。对于防止偶发盗版的名义,它们都相当容易使用,当然这是你真正关心的唯一盗版问题。

  • 我发现没有一个许可证提供商与现有的付款处理器/网关真正兼容。有一些“全能型”解决方案,但那里的技术债务水平对我来说是不可接受的(自由职业者和唯一的开发人员)。我正在寻找一种简单的方法,从网站上的“立即购买”链接转到购买后解锁桌面软件。一些现有的“全能型”解决方案对此目的过度,有些完全忽略了“购买”方面。

  • 我最终使用Xml数字签名使用应用程序的私钥签署许可证文件,该私钥永远不会分配给用户。结果:您在目标计算机上拥有一个.LIC或.LICX文件,用户可以阅读它(除了信封签名外,它是纯文本),但不能修改它。 (或者,他们在不知道您已经知道的情况下无法修改它。)这个小文件是整个系统的关键。

  • 当应用程序加载时,它验证XML签名是否有效(使用应用程序的公钥,该公钥与应用程序一起分发),如果有效,则从许可证文件中读取信息,并根据此启用/禁用某些功能。例如,您的许可证文件可以包含产品到期日期或几个唯一的机器信息(要小心,不要给您的合法用户带来不便...您不希望他们每次更换硬盘时都必须重新申请许可证密钥)。

  • 作为额外的(稍微有点侵入性)步骤,您可以让应用程序连接到您的服务器,尽管这会使您陷入服务器停机等问题。有些开发人员愿意忍受这种情况,而有些则不愿意。

  • 现在对于购买部分,有许多选项。 Paypal是最简单的方法。您可能会或可能不喜欢他们的费率计划,但是使用Paypal绝对是一件轻松的事情。

  • 对于这一点,您需要一个Premier或Business帐户,而不是Personal帐户。注意:在Paypal文档中,有时会说您需要Paypal Business帐户。无论何时他们说那样,他们实际上的意思是“Paypal Business或Premier帐户”。

  • 现在为自己创建一个产品网站并自定义您的立即购买按钮等。当用户购买时,您的网站将从Paypal IPN接收到ping,这是他们的通知服务。这个ping只是对您网站上定义的HTTP端点的调用,并包含有关购买的所有信息。主要是用户的电子邮件...

  • (好吧,我觉得我应该提一下:Paypal和大多数其他合法处理器都有一个“沙箱”,您可以在上面测试所有这些内容,然后再进行实际操作。这样做对于让您真正上线并有资金在线上是非常有帮助的。)

  • 您将使用它

    这对我非常有帮助,实现起来也很简单。整个过程的关键在于:相信那些 XML DSigs。当 LIC 文件丢失时,您将默认进入试用模式。当签名被修改时,您将切换到试用模式。只有当 LIC 文件存在、经过有效签名并包含正确信息时,您才会(在代码中)开放对“完整”功能的访问。
    此外,在代码中插入多个许可证检查点。我在应用程序启动时进行一次检查,在空闲时进行另一次检查,并在进入关键功能区域之前进行第三次检查。因此,如果有人反向编译代码,他们至少需要进行一些搜索才能绕过所有许可证检查。当然,您无法阻止人们通过补丁等方式绕过这些检查。您只是希望让它变得更加困难。

  • 2
    伟大的演示。在幕后,我相信这就是Desaware为我们所做的一切,但我们可以在组件级别上进行操作,每个应用程序只需要编写约2行代码。 - womp
    1
    非常棒的答案,这正是我在寻找的信息类型。感谢您花费时间并将其整理在一起,我相信不仅我一个人会从中受益。 - Burt
    2
    不客气,祝你好运~ 希望你的软件足够受欢迎,以至于被盗版。 :) - Swingline Rage
    1
    好的回答,有一个问题。在第10步,为什么不直接生成许可文件并将其附加在电子邮件中发送给客户呢?激活码似乎是多余的,因为它不包括特定于用户计算机的内容,这将防止在多台计算机上运行应用程序。 - Ash
    @Santux,如果你从用户的计算机上收集信息,并在你的检查点中使用该信息来验证许可证,则不需要这样做。 - Carlo
    显示剩余2条评论

    7
    如果你想正确地完成这些事情,我真诚地建议购买可信的第三方解决方案。对于.Net,有几种许可包可用(我们使用Desaware来制作我们的产品,虽然我没有直接与他们合作过,所以无法给出详细的建议。从我接触到的内容来看,它似乎足够简单)。没有繁琐的步骤,没有漏洞,长期来看,节省的时间将是巨大的。
    第三方支付服务可以为您处理在线信用卡交易,还有PayPal。在Google上搜索“如何在网上接受信用卡付款”,您会找到无数的商家解决方案提供者。
    如果您愿意花时间自己构建许可系统,这个StackOverflow线程是一个非常好的资源,可以考虑各个方面。

    谢谢womp,由于我没有太多的资金投入,我想我将不得不自己动手。你有使用任何支付网关的经验吗?它们的数量之多有点令人不知所措,能够从有经验的人那里获得反馈并能够提供建议的话会很棒。 - Burt
    我没有任何个人经验。一个同事使用2co.com,也就是2checkout.com。他说他们收取5-6%的费用以及交易费用。我不觉得他非常推荐他们 ;) - womp
    我只有一个不同的看法:对于简单应用程序的简单销售,在时间至关重要且最佳保护并不关键的情况下,我认为自己开发是可行的方法。另一方面,如果有400,000个用户依赖您的软件平稳运行...呵呵。这不是我在未来一百万年内尝试做的事情。但还是点赞。 - Swingline Rage

    4

    如果你想保护.NET应用程序,你需要使用某种形式的软件保护和许可证控制。市面上有数百种选择,从非常便宜(以及如何自己创建的文章)到非常强大的商业工具。


    感谢您的回复,里德。我知道有数百种选择,最好的情况下可能会让人感到困惑。我希望能得到一些指导,了解什么最适合一个正在自力更生的小型软件供应商。 - Burt
    @Burt:我很乐意提供建议,但我们需要更多的信息。你的预算是多少?你有什么要求等等... - Reed Copsey
    @ReedCopsey,我正在寻找一个产品密钥/序列号生成器,以便与Visual Studio 2012的InstallShield LE(或完整版本)集成。我的公司希望购买第三方生成器。你有什么建议吗?预算大约在1000美元左右。生成器必须能够与InstallShield集成。谢谢。 - Kala J

    2

    您可以考虑使用CryptoLicensing For .Net - 它提供了完整版和试用版的选项(使用天数、唯一使用天数、执行次数等)。它还配备了准备好的许可证服务器,带有PayPal、ShareIT、Plimus等电子商务集成。


    非常广泛的软件 - 可能需要先阅读入门指南:http://www.mashitup.be/how-to-use-cryptolicensing/ - user1841243

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接