如何将 WPF 应用程序设为 30 天试用版,并使用产品密钥对其进行许可?

2023-12-06

我已经使用 C# 在 WPF 中开发了一个应用程序,现在的问题是我希望我的应用程序作为许可版本,前 30 天它应该是免费的,即试用版,所以现在当它完成时,它应该弹出一个窗口,说试用版是完成激活它,如果用户单击“是”,则会出现一个带有电子邮件 ID 文本框的窗口,如果给出电子邮件 ID,则应生成产品密钥并将其发送到指定的邮件 ID。

如何实现,请帮忙提前致谢。


没有开箱即用的方法可以做到这一点(尽管您可以购买可以为您做到这一点的 SDK)。人们普遍关心的问题是:

  1. 您将如何将可许可的功能编码到密钥(或其他介质)中?
  2. 您将在哪里存储这些数据?
  3. 您将如何尝试避免篡改这些数据?
  4. 如果未获得许可,则编写代码以禁用您想要的功能

关于这些点的一些选项/想法是:

  1. 如果您的功能数量有限(或者只是获得许可或未获得许可),那么将详细信息编码到密钥中就很容易了。 Base32 编码通常会产生易于重新设置密钥的值,并具有合理的位数来对用户数量等进行编码。如果您有更多数据需要编码(大量可授权功能),那么“密钥”可能会出现更多问题。过去,我使用的密钥除了充当与可下载 xml 文件的关联之外没有任何作用,该文件具有非常详细的功能细分。

  2. 根据您的应用程序,您可以存储在文件系统、注册表或数据库中。尝试获得有关系统的某些信息(例如主板 ID、数据库详细信息等)的许可证可能是值得的。

  3. 我的一般偏好是使用在线激活和数字签名来确保数据不被篡改。显然,您还可以尝试将防篡改内容作为校验和位编码到密钥中。您还需要关注人们将时钟调慢,您可以执行一些操作,例如每次 X 启动时检查互联网时间提供商,以确保他们的时间与所在时区的时间相差在 X 分钟之内。此外,当前日期/时间是否早于上一个启动日期/时间。

  4. 这完全取决于你。您可以在启动时显示一个对话框,将人们推送到您的许可证购买页面。或者(可能更适合转换,但更难编码)是禁用某些(关键)功能以鼓励人们升级,但如果不这样做,他们仍然拥有半功能应用程序。

话虽如此,无论您做什么,如果有人真的想的话,总会找到一种方法来规避您的许可(只需询问 Microsoft 或 Adob​​e 之类的公司即可)。因此,问题在于您想投入多少时间来编写巧妙的许可机制,与规避该机制的人造成的销售损失成本,以及真正的客户许可您的应用程序有多容易(就好像这对您来说太难了)会让人们不再购买)。

希望能有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 WPF 应用程序设为 30 天试用版,并使用产品密钥对其进行许可? 的相关文章

  • 将参数传递给模板类型的 C# 泛型 new()

    添加到列表时 我试图通过其构造函数创建一个 T 类型的新对象 我收到编译错误 错误消息是 T 创建变量实例时无法提供参数 但我的类确实有一个构造函数参数 我怎样才能做到这一点 public static string GetAllItems
  • WPF 自定义控件 - ItemsControl 模板未应用

    我正在构建一个派生自 TabControl 的自定义 WPF 控件 在 ControlTemplate 中 我使用 ItemsControl 来显示从模板绑定的列表 FileMenuItem 类型的可观察集合 在程序执行期间 我在输出窗口中
  • Activator.CreateInstance 缺少方法异常

    我在 C dll 中有一个类 其中包含以下类 public class RequiredTask Base BaseObject public string Name get set public string Description ge
  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 更改 WPF 应用程序清单?

    我已经发布给微软的评论 http connect microsoft com VisualStudio feedback ViewFeedback aspx FeedbackID 420920WPF 中的对话框未启用 VisualStyle
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 将 System.Windows.Forms.Keys 序列转换为 Char

    有没有办法转换由 Keys 枚举表示的击键序列 即System Windows Forms Keys 在一个字符中 例如 Keys Oem4进而Keys A产生 char 它一定存在于 WinAPI 中的某个地方 因为当我在文本框中按下按键
  • 将新行添加到表后如何更新 datagridview 的行列表

    我有一个 datagridview 在表单的加载事件上填充了表集合 我还有一个由用户填写的表单 并将新行添加到表 onclick 事件 我想在向该表添加新行后更新 datagridview表 我使用绑定到绑定数据源的 sqladapter
  • 在 C# 应用程序中使用 LinkedIn API

    我正在构建一个小型 Windows 窗体应用程序 并且想要从公司搜索 API 访问信息 我什至不想在个人资料中写入任何内容 我已经打开一个网络浏览器并要求我的用户在我的应用程序中输入一些验证码 这真是令人难以置信的令人沮丧 有大量针对 Py
  • 实体框架未正确修改或删除子项

    我正在尝试保存Firm包含地址和网站的对象 我开发了在 Angular 7 中使用反应式表单在 UI 中添加和删除地址控件的功能 Firm对象 它正在为地址和网站创建附加条目 而不是将其视为现有记录 因此 如果我从 UI 中删除网站和地址
  • Prism 7. 将 PrismApplication.CreateShell() 与非 Window 控件一起使用

    我想从 6 3 更新到 7 我似乎遇到了障碍 在 App xaml 中使用 PrismApplication 类时 CreateShell 期望返回类型为 Window 而不是之前需要 DependencyObject 的 BootStra
  • 性能计数器损坏?

    性能计数器是邪恶的 不要使用它们 if PerformanceCounterCategory Exists ILoveYou is true PerformanceCounterCategory Delete ILoveYou throws
  • 如何按顺序而不是并行等待 C# 任务?

    我有一组异步测试 它们在外部硬件上运行 我可以按顺序运行它们 但因为所有这些测试都有副作用 所以我希望能够重新排列它们并一遍又一遍地运行它们 当我将它们放入列表中并尝试等待每个之后 它们全部并行运行 而不是 1 个 1 个运行 我希望能够打
  • 使用.NET 访问Windows 注册表?

    我发现一个奇怪的行为 NET http en wikipedia org wiki NET Framework模块访问Windows注册表 http en wikipedia org wiki Windows Registry使用Regis
  • 从 SpecFlow 设置 Nunit TimeoutAttribute

    我已经使用 SpecFlow 编写了几个长时间运行的端到端集成测试 但由于 Nunit 超时 它们失败了 将 Timeout x 属性添加到 TestFixture 可以解决问题 但当然每次功能更新时都会被覆盖 如何以 SpecFlow 尊
  • 从另一个命令 Handle() 方法中调用命令

    嗨 我正在使用简易注射器 https simpleinjector orgDI 库并一直在关注一些关于围绕命令模式设计的架构模型的非常有趣的材料 同时 在我的架构的命令方面 https cuttingedge it blogs steven
  • 什么是 System.ContextBoundObject?

    What is 上下文绑定对象 http msdn microsoft com en us library system contextboundobject aspx用于 该文档提到了 上下文 它似乎是以编程方式定义的 但未能给出任何解释
  • ASP.NET 验证控件和 Javascript 确认框

    我有一个使用 NET 服务器端输入验证控件的页面 此页面还有一个 javascript 确认框 在提交表单时会触发该确认框 当前 当选择 提交 按钮时 会出现 javascript 确认框 一旦确认 就会触发 ASP NET 服务器端验证控
  • 如何使用 EPPlus 在单个 Excel 单元格中加载包含逗号的文本

    我正在尝试EPPlus 库 http epplus codeplex com 我被困在这个问题上 我必须在单个单元格中加载文本 但是当该文本包含逗号时 我使用的代码会沿着多个单元格 沿着正确的方向 分割文本 这是我用来加载文本的代码 usi
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c

随机推荐

  • 将 VBA 数组元素输出到 Excel 中的一个单元格

    所以我有一个 vba 代码 它创建一个包含多个元素的数组 我想将这些元素输出到 Excel 的一个单元格中 我能够将其元素输出到多个单元格 但更喜欢在一个单元格中输出 这可以做到吗 如果数组被声明为 String 或 Variant 那么你
  • 替换借用的变量[重复]

    这个问题在这里已经有答案了 我有一桶需要积累价值的对象 它受到保护RwLock 因此我也保留它的写锁 我想在该过程期间保留单个写锁 例如 use std sync RwLock fn main let locked RwLock new V
  • 膨胀类和 android.support.v7.widget.CardView 时出错

    我想在我的项目中使用 CardView 但是当我运行我的应用程序时 出现以下错误 我在用着Eclipse Error Error inflating class and android support v7 widget CardView
  • 添加元素动态后的 JQuery 绑定事件

    动态添加元素后遇到问题 它没有单击事件 因此我有以下问题 myclass gt li click function 所以基本上当我点击 LI 元素时应该会发生一些事情并且它可以工作 但是当我向 myclass 添加一个新的 LI 元素 即
  • AudioInputStream() 不会停止

    我已使用以下命令将背景音频插入到我的程序中AudioInputStream 当我按下On 将播放背景音频 并且Off将停止播放背景音频 这是我的音频播放部分代码的部分 public void playSound int i try Othe
  • 删除表(如果存在)

    我有以下 PL SQL declare i cnt number begin select count 1 into i cnt from dba tables where table name upper foo and owner up
  • Kendo UI 网格始终从第 0 页开始

    我有一个 Kendo UI 网格 它总是从 0 开始 如果我更改列的排序 则它会变为 1 并显示其他页码 我究竟做错了什么 这是我的代码 userGrid kendoGrid dataSource pageSize 5 transport
  • 如何不按频率对 SOLR 拼写检查建议进行排序?

    如果您搜索ahve在我的分期索引上你得到the作为第一个拼写检查更正 因为the出现超过have在索引中 我索引了 500 个文档 如果您搜索ahve在我的本地索引上你得到have作为第一个拼写检查更正 因为have比索引中任何其他单词出现
  • 是否有相当于 PHP 的“父级”的 javascript 原型继承?

    我正在使用原型继承 我想在基类上调用重写的方法 在 PHP 中 我可以使用 Parent functionName 来做到这一点 使用 JavaScript 原型继承可以实现这一点吗 考虑以下示例 var A function this d
  • 为什么我在java中的布尔测试总是失败?

    我正在尝试进行布尔测试 以便如果其中一个轮胎压力低于 35 或高于 45 系统会输出 充气不良 在我的课堂上 我必须使用布尔值 这就是我尝试过的 但是返回的布尔值始终为 true 我不明白为什么 public class tirePress
  • MD5 文件哈希 - 将 Delphi 输出与 PHP md5_file 函数匹配

    我目前在 Delphi 7 中使用此代码进行 md5 散列 function MD5 const fileName string string var idmd5 TIdHashMessageDigest5 fs TFileStream b
  • “OutOfMemoryError:超出GC开销限制”:用java解析大json文件

    我尝试用Java解析大型json文件 超过600Mo 我的json文件看起来像这样 0 link id 2381317 overview mjklmklmklmklmk founded 2015 followers 42 type Game
  • Xamarin Forms Labs Camera - 永久保存图像并调用它们

    我让相机功能正常工作 它也像我要求的那样在页面上显示图像 但是有没有办法将图像永久保存在手机或其他地方然后调用呢 太感谢了 这是一些适合我的代码 IFileAccess是我的包装纸吗System IO File文件打开 写入 检查是否存在等
  • opencv中如何将3个矩阵合并为1个?

    我有三个矩阵 每个矩阵的大小4x1 我想将所有这些矩阵复制到另一个大小的矩阵4x3并称之为R 有聪明的方法吗 您可以使用 hconcat 进行水平连接 您可以在每个矩阵中使用它 例如hconcat mat1 mat2 R 或直接将其应用于向
  • Xcode 中的“在多个设备上预览”选项

    我正在关注 YouTube 上的一些教程 在大多数教程中 他们使用 UIKit 故事板 框架 现在观看这些视频他们可以打开多个设备同时预览作品 见下图 我正在使用 Xcode 14 我正在搜索他们正在使用的 预览 选项或功能 但我根本找不到
  • 根据域名使 URL 唯一

    我有一个名为的 URL 列表网址列表 https target com first one https target com something first one http target com dir first summer http
  • 在嵌套数据框中,将信息从一个列表列传递到另一列中应用的函数

    我正在编写一份报告 必须将大量相似的数据框导出到 Word 中漂亮的表格中 我的目标是一次性实现这一目标 使用flextable生成表格和purrr tidyverse将所有格式化过程应用于嵌套数据框中的所有行 这就是我的数据框的样子 df
  • 如何使用 WebBrowser 控件填写 WebForm 并单击提交按钮?

    我怎样才能点击这个SUBMIT使用 WebBrowser 控件的按钮 我尝试过 For Each divSect As HtmlElement In WebBrowser1 Document GetElementsByTagName but
  • 禁用 UITableView 水平滚动

    我创建了一个UITableView有一个小框架 如 0 0 50 50 我想禁用水平滚动但保留垂直滚动 I set self table bounces NO 但 tableview 也不能垂直滚动 因此 动画并不是那么完美 那么有人有提示
  • 如何将 WPF 应用程序设为 30 天试用版,并使用产品密钥对其进行许可?

    我已经使用 C 在 WPF 中开发了一个应用程序 现在的问题是我希望我的应用程序作为许可版本 前 30 天它应该是免费的 即试用版 所以现在当它完成时 它应该弹出一个窗口 说试用版是完成激活它 如果用户单击 是 则会出现一个带有电子邮件 I