代码之家  ›  专栏  ›  技术社区  ›  Burt

如何授权WPF Windows应用程序[关闭]

  •  18
  • Burt  · 技术社区  · 14 年前

    我已经开发了一个小应用程序,我想尝试并销售它,但是我不知道如何最好地解决这个问题。

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

    2. 我该如何处理接受付款?

    考虑到我是一个一人乐队,没有多少钱,我希望能找到一个免费或低成本、有效、安全和易于实施和维护的解决方案。这并不是我有很多经验的事情,因为我通常是为公共部门开发的,在公共部门,他们作为一个整体购买解决方案,而我们从未授权过它。

    任何帮助都将不胜感激。 谢谢,

    4 回复  |  直到 14 年前
        1
  •  36
  •   Swingline Rage    14 年前

    我可以告诉你我是怎么做的。免责声明:您的里程可能会有所不同。这是为了防止简单的WinForms或WPF或其他桌面应用程序的随意盗版。它并不是特别坚固,也不能防止复杂的破裂,但它在防止偶然的盗版方面做得很好。

    1. 为了获得许可,我尝试了几种第三方解决方案。它们都很容易用于 防止偶然盗版 当然,如果你真的只关心盗版的话。

    2. 我发现没有一个许可证提供商真正与现有的支付处理器/网关兼容。有几个“一体式”解决方案,但技术债务的水平是无法接受的我(自由职业者和唯一的开发商)。我在寻找一个简单的方法,从网站上的“一口价”链接到购买后解锁桌面软件。一些现有的“一体式”解决方案为此目的有些杀伤力过大,有些则完全忽略了“购买”方面。

    3. 我最后用了 Xml Digital Signatures 使用从未分发给用户的应用程序私钥对许可证文件进行签名。结果:您在目标计算机上有一个.lic或.licx文件,用户可以读取它(它是纯文本,信封签名除外),但不能修改。(或者更确切地说,没有你他们不能修改它 知道 他们已经修改了它。)这个小文件是整个系统的关键。

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

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

    6. 现在对于购买部分,有很多选择。贝宝是最容易的。你可能会或可能不喜欢他们的利率计划,但与PayPal一起运行是绝对的。

    7. 为此,您需要的是卓越理财或商业账户,而不是个人账户。注意:在Paypal文档中,它有时说你需要一个PayPal商业帐户。每当他们这么说的时候,他们实际上都在说“PayPal业务或总理账户”。

    8. 现在为自己准备一个产品网站并自定义“立即购买”按钮等。当用户进行购买时,您的网站将收到来自 Paypal IPN ,这是他们的通知服务。这个ping只是对网站上定义的HTTP端点的调用,它包含了您想要的关于购买的所有信息。主要是用户的电子邮件…

    9. 好的,我想我应该提到:PayPal和大多数其他合法处理器都有一个“沙盒”,你可以在去现场之前测试所有这些。想让你对现实生活有一种温暖的模糊感吗?钱就在网上。)

    10. 购买后,您将使用它自动向用户发送一个激活码,这样他们就不需要等待24小时,您就可以手动向他们发送一个代码。在数据库中存储这个激活代码(在这种情况下,激活代码可以是任何唯一的、难以猜测的数字,例如guid,是否经过预处理)并带有一个使用计数,您将跟踪该计数以检测重复的代码。

    11. 用户通过您提供的屏幕将激活代码输入软件。

    12. 软件通过HTTPS与服务器联系(这是一个只有在软件解锁时才会发生的一次性事件),然后说,“嘿,用户刚才给我的许可证代码有效吗?”

    13. 如果提供的激活码与销售时存储在数据库中的代码匹配,但激活码尚未确认,则成功!

    14. 然后,服务器需要构建许可证文件,这是一个非常简单的XML或文本文件,其中包含“允许此软件副本执行的操作”。它应该包含什么没有标准,只有一些约定。

    15. 服务器 使用应用程序的私钥签署许可证文件 并将其作为数据流返回到应用程序…

    16. 它将其保存为.lic或.licx(或任何您想要的扩展名)文件,然后根据步骤3检查加载时间。

    这对我来说非常有效,而且很容易实施。整个过程的关键是:相信那些XML DSigs。如果缺少LIC文件,则默认为试用模式。修改SIG后,切换到试用模式。只有当LIC文件存在、经过有效签名并且包含正确信息时,您才(在代码中)打开对“完整”功能的访问。

    另外,在代码中插入多个许可证检查点。我在应用程序启动时做一个,在空闲时做另一个,在进入关键功能区域之前做一个。因此,如果有人确实颠倒了代码,而且他们可以,那么他们至少需要做一些搜索,以消化所有的许可检查。当然,你做不到任何事都不能阻止人们绕过那些检查。你只是想让事情变得更困难一点。

        2
  •  7
  •   Community Jaime Torres    7 年前

    如果你想正确地做这件事,我真诚地建议你为这两件事购买一个可信的第三方解决方案。有几个.NET的许可包(我们使用 Desaware 对于我们的产品,虽然我没有直接与他们合作那么多,所以我不能给出详细的推荐。这对我所接触到的东西来说似乎已经足够简单了)。不必大惊小怪,不存在漏洞,从长远来看,节省的时间是巨大的。

    第三方支付服务可以处理网上信用卡交易给你,而且总是贝宝。谷歌的“如何接受网上信用卡支付”,你会想出无数的商家解决方案提供商。

    如果你愿意花时间自己建立一个许可系统, this StackOverflow thread 是一个很好的资源,可以考虑各个方面。

        3
  •  4
  •   Reed Copsey    14 年前

    你要用某种形式的 Software Projection and Licensing 对于.NET应用程序。有上百种选择,从非常便宜的(以及如何推出自己的文章)到非常强大的商业工具。

        4
  •  2
  •   logicnp    14 年前

    你可以考虑 CryptoLicensing For .Net -它提供完整和试用的选项(使用天数、唯一使用天数、执行等)。它还配备了准备好的许可证服务器与电子商务集成的贝宝,共享,普利莫斯等。