转自:http://www.VEVb.com/jara/
软件注册是商业软件必不可少的模块,在整个程序中启到举足轻重的作用。
系统启动时首先会检测程序是否注册,如果程序没有注册可以使用30次,试用次数完成后将弹出注册界面。程序每次登陆都会将程序使用次数写入到注册表中,程序注册是也会将注册码已加密的方式写入到注册表中。
public static void RegMetod(bool isDownLoad) { try { SoftReg softReg = new SoftReg(); //判断软件是否注册 RegistryKey retkey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true).CreateSubKey(Encrypt.EncryptDES("mySoftWare", Const.EncryptKey)).CreateSubKey(Encrypt.EncryptDES("Register.INI", Const.EncryptKey)); foreach (string strRNum in retkey.GetSubKeyNames()) { if (Encrypt.DecryptDES(strRNum, Const.EncryptKey) == softReg.GetRNum()) { run(isDownLoad, "正式版", ""); return; } } Int32 tLong; try { tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE//SOFTWARE//" + Encrypt.EncryptDES("mySoftWare", Const.EncryptKey), "UseTimes", 0); } catch { Registry.SetValue("HKEY_LOCAL_MACHINE//SOFTWARE//" + Encrypt.EncryptDES("mySoftWare", Const.EncryptKey), "UseTimes", 0, RegistryValueKind.DWord); } tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE//SOFTWARE//" + Encrypt.EncryptDES("mySoftWare", Const.EncryptKey), "UseTimes", 0); if (tLong < 30) { int tTimes = tLong + 1; Registry.SetValue("HKEY_LOCAL_MACHINE//SOFTWARE//" + Encrypt.EncryptDES("mySoftWare", Const.EncryptKey), "UseTimes", tTimes); int xint = 30 - tTimes; //试用版不提供更新服务 run(true, "试用版", xint.ToString()); } else { DialogResult result = Comm.MessageBox.YesNo("试用次数已到!您是否需要注册?"); if (result == DialogResult.Yes) { RegisterForm registerForm = new RegisterForm(); registerForm.ShowDialog(); } else { application.Exit(); } } } catch (Exception e) { Log.Error("程序注册出错!"); throw new Exception("程序注册出错:" + e.Message); } }
注册界面:
#region * 注册 PRivate void btnReg_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(this.txtLicence.Text)) { Client.Win.Comm.MessageBox.Info("注册码不能为空!"); return; } try { if (txtLicence.Text == softReg.GetRNum()) { Client.Win.Comm.MessageBox.Info("注册成功!重启软件后生效!"); RegistryKey retkey = Registry.CurrentUser.OpenSubKey("Software", true).CreateSubKey(Encrypt.EncryptDES("mySoftWare", Const.EncryptKey)).CreateSubKey(Encrypt.EncryptDES("Register.INI", Const.EncryptKey)).CreateSubKey(Encrypt.EncryptDES(txtLicence.Text, Const.EncryptKey)); retkey.SetValue(Encrypt.EncryptDES("UserName",Const.EncryptKey),Encrypt.EncryptDES( "Rsoft",Const.EncryptKey)); this.Close(); } else { Client.Win.Comm.MessageBox.Warn("注册码错误!"); txtLicence.SelectAll(); } } catch (Exception ex) { throw new Exception(ex.Message); } } #endregion
生成机器码(由MAC地址和硬盘券盘号截取前面20位):
///<summary> /// 生成机器码 ///</summary> ///<returns></returns> public string GetMNum() { string strNum = Computer.Instance().MacAddress + Computer.Instance().VolumeSerialNumber; // GetCpu() + GetDiskVolumeSerialNumber(); string strMNum = string.Empty; if (strNum.Length > 20) { strMNum = strNum.Substring(0, 20); //截取前20位作为机器码 } else { strMNum = strNum; } return strMNum; }
生成注册码:
///<summary> /// 生成注册码 ///</summary> ///<returns></returns> public string GetRNum() { SetIntCode(); string strMNum = GetMNum(); for (int i = 1; i < charCode.Length; i++) //存储机器码 { charCode[i] = Convert.ToChar(strMNum.Substring(i - 1, 1)); } for (int j = 1; j < intNumber.Length; j++) //改变ASCII码值 { intNumber[j] = Convert.ToInt32(charCode[j]) + intCode[Convert.ToInt32(charCode[j])]; } string strAsciiName = ""; //注册码 for (int k = 1; k < intNumber.Length; k++) //生成注册码 { if ((intNumber[k] >= 48 && intNumber[k] <= 57) || (intNumber[k] >= 65 && intNumber[k] <= 90) || (intNumber[k] >= 97 && intNumber[k] <= 122)) //判断如果在0-9、A-Z、a-z之间 { strAsciiName += Convert.ToChar(intNumber[k]).ToString(); } else if (intNumber[k] > 122) //判断如果大于z { strAsciiName += Convert.ToChar(intNumber[k] - 10).ToString(); } else { strAsciiName += Convert.ToChar(intNumber[k] - 9).ToString(); } } return strAsciiName; }
获取电脑的基本信息:
/// <summary> /// Computer Information /// </summary> public class Computer { public string CpuID; public string MacAddress; public string DiskID; public string ipAddress; public string LoginUserName; public string ComputerName; public string SystemType; public string TotalPhysicalMemory; //单位:M public string VolumeSerialNumber; private static Computer _instance; public static Computer Instance() { if (_instance == null) _instance = new Computer(); return _instance; } protected Computer() { VolumeSerialNumber = GetDiskVolumeSerialNumber(); CpuID = GetCpuID(); MacAddress = GetMacAddress(); DiskID = GetDiskID(); IpAddress = GetIPAddress(); LoginUserName = GetUserName(); SystemType = GetSystemType(); TotalPhysicalMemory = GetTotalPhysicalMemory(); ComputerName = GetComputerName(); } ///<summary> /// 获取硬盘卷标号 ///</summary> ///<returns></returns> public string GetDiskVolumeSerialNumber() { try { ManagementClass mc = new ManagementClass("win32_NetworkAdapterConfiguration"); ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=/"c:/""); disk.Get(); return disk.GetPropertyValue("VolumeSerialNumber").ToString(); } catch {
新闻热点
疑难解答