如何让用户在1台PC上使用1个应用程序(或创建许可证)

时间:2014-03-03 13:30:04

标签: c# wpf deployment licensing release

我是WPF的新手。我有使用MS SQL的WPF应用程序并将其发布,将其设置为客户端PC并且希望客户端仅使用自己的PC,无法复制该应用程序(使用数据库)并在其他PC中使用它。

我该如何预防?

我研究并知道使用PC的Mac Address。要加密mac地址和应用程序开始检查加密的mac地址是否有效。但是,在这种情况下,用户可以更改其他PC的mac地址,并可以在那里使用应用程序。

有哪些方法(方法)可以解决我的问题?

1 个答案:

答案 0 :(得分:1)

我正在研究为硬件设备上的计算机生成唯一密钥的最佳方法。

如果没有尝试使用复合键,即依赖于某个设备的某些独特特性,那么这些键实际上并不存在!

研究结果(简称)

以下设备用于搜索唯一密钥:

  • 主板
  • CPU
  • HDD
  • 网卡

每个设备都有两个属性:型号和序列号

但这是发生的事情:

  • 通常,主板制造商会将序列号设置为占位符或123456。
  • CPU属性可以被认为是唯一的 - ProcessorID,也是重复的,并且通常在最后我得到的印象是同一类型制造商的处理器放一个数字。即我们可以假设cpu根本没有序列号,或者无法以编程方式进行编程
  • HDD的情况更好。型号和系列中的序列号不同。
  • 更改网卡的MAC地址非常简单

一般来说,论坛上的很多人都会写一些经常遇到非唯一数量设备的人。

因此,唯一键的唯一选项可以是从不同设备的特征和其他计算机属性中收集的复合键。

由于系统的独特特性也可以考虑如下:系统UUID(通用唯一ID) - 这是系统的一些独特关键

唯一键的公式为:

HASH(MotherBoard.Product + MotherBoard.SerialNumber + PhysicalDisk.ModelNumber + PhysicalDisk.SerialNumber + ComputerSystemProduct.UUID)

  • MotherBoard.Product - 主板型号名称
  • MotherBoard.SerialNumber - 主板序列号
  • PhysicalDisk.ModelNumber - 物理磁盘模型(非逻辑磁盘!!!)
  • PhysicalDisk.SerialNumber - 物理磁盘序列号
  • ComputerSystemProduct.UUID - 唯一系统编号

上面的所有属性都可以通过WMI获得,但PhysicalDisk.SerialNumber并不总是出于未知原因。 您可以找到一些用于读取HDD序列号的C ++解决方案,但是我们决定采用通过WMI返回的光盘对象的Signuture值来替代PhysicalDisk.SerialNumber。