WPF软件正版激活功能的实现

你。 提交于 2019-12-09 04:03:43

WPF软件正版激活功能的实现

1.设计思路

用户进入注册界面,获得计算机唯一标识码,用户将计算机唯一标识码发送给软件开发商,开发商通过通过算法 授权码=f(计算机唯一标识) 得到授权码,并将授权码发回给用户,用户输入授权码,软件内部通过同样的算法 授权码=f(计算机唯一标识) 进行计算,比较用户输入的授权码与软件计算得到的授权码是否一致,判断软件是否授权成功。(这里暂时采用MD5加密算法作为授权码算法)

2.授权码在软件中的保存位置

通过XML文件保存。
首先创建XML文件,如下图
创建XML

然后设置该文件的属性/复制 为 复制到输出目录
之后即可通过以下代码读写授权码

string xmlpath = Directory.GetCurrentDirectory() + "\\Data\\Settings.xml";
//写
XElement Settings_XML2 = XElement.Load(xmlpath);//解析xml
Settings_XML2.Element("APPKey").Value = "lzf";//读取APPKey
Settings_XML2.Save(xmlpath);

//读
XElement Settings_XML = XElement.Load(xmlpath);//解析成xml
string appkey = Settings_XML.Element("APPKey").Value.ToString();//读取APPKey

3.获取计算机唯一标识的方法

原计划采用硬件标识来作为唯一标识,因为在论坛中看到一个帖子
http://bbs.csdn.net/topics/390838655
之后放弃使用硬件标识。这里通过软件生成一个GUID并写入注册表作为计算机的唯一标识。

生成GUID并写入注册表的代码如下:

RegistryKey key = Registry.LocalMachine;//注册表,本地计算机的配置数据
RegistryKey software = key.OpenSubKey("software\\AppBindingPC",true);//这里AppBindingPC是程序名,可以随意取
if (software == null)
{
    software = key.CreateSubKey("software\\AppBindingPC");//创建目录
}
if(software.GetValue("PCGUID") == null)
{
    software.SetValue("PCGUID", Guid.NewGuid().ToString("P"));//创建键值
}
string PCGuid = software.GetValue("PCGUID").ToString();//读取键值

程序运行到这里可能会报错,需要添加修改注册表的权限,或者以管理员权限运行
运行成功后,可以看到注册表中写入了新的键值
注册表

另:
通过.NET System.Management类可以获得电脑的硬件信息。

程序源码:http://download.csdn.net/download/lzf1019940946/9943598

参考博客:
//如何让软件绑定计算机硬件
http://blog.csdn.net/smstong/article/details/49848055
//win7下c#程序修改注册表的权限问题
http://www.cnblogs.com/bile/archive/2012/03/05/2381076.html
//C#读写注册表
http://blog.csdn.net/younghaiqing/article/details/61918968
//C#操作注册表
http://www.cnblogs.com/txw1958/archive/2012/08/01/csharp-regidit.html
//生成GUID
https://msdn.microsoft.com/en-us/library/97af8hh4.aspx
// C#实现MD5加密
http://blog.csdn.net/pan_junbiao/article/details/19477895

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!