Licensing实例(一)

说明:由于人很懒,并且时间的关系。我不一一说明前因后果。一般blog上的都是代码实例。如果你们认为有用,自己看一下注释:)

 

     /// <summary>
    
/// 试用警告
    
/// </summary>

     public   class  EvaluationMonitor : IDisposable
    
{
        
private RegistryKey _baseKey;
        
private static byte[] _desIV = new byte[] 0xa30xef0xd60x210x370x800xcc0xb1 };
        
private static byte[] _desKey = new byte[] 0x120x750xa80xf1500xed0x130xf2 };
        
private DateTime _firstUseDate;
        
private string _firstUseKeyName;
        
private bool _invalid;
        
private DateTime _lastUseDate;
        
private string _lastUseKeyName;
        
private byte[] _productData;
        
private RegistryKey _rootKey;
        
private int _usageCount;
        
private string _usageKeyName;
        
private const string classFirstUseKey = "Cobainsoft";
        
private const string classLastUseKey = "Control";
        
private const string classUsageKey = "TypeLib";
        
private const string userFirstUseKey = @"SoftwareMicrosoftWABWAB Sort State";
        
private const string userLastUseKey = @"SoftwareMicrosoftWABWAB4LastFind";
        
private const string userUsageKey = @"SoftwareMicrosoftWABWAB4";


        
/// <summary>
        
/// 初始化一个试用警告。
        
/// </summary>
        
/// <param name="productID"></param>

        public EvaluationMonitor(string productID)
        
{
            RegistryKey key1;
            
this._usageCount = 0;
            
this._firstUseDate = DateTime.MinValue;
            
this._lastUseDate = DateTime.MinValue;
            
this._invalid = false;
            
this._productData = this.Encrypt(productID);
            
try
            
{
                Registry.ClassesRoot.CreateSubKey(productID);
                Registry.ClassesRoot.DeleteSubKey(productID, 
false);
                
this._rootKey = Registry.ClassesRoot;
                key1 
= this._rootKey.OpenSubKey("CLSID"true);
                
this._usageKeyName = "TypeLib";
                
this._firstUseKeyName = "Cobainsoft";
                
this._lastUseKeyName = "Control";
            }

            
catch
            
{
                
this._rootKey = Registry.CurrentUser;
                key1 
= this._rootKey.OpenSubKey("Identities"true);
                
this._usageKeyName = @"SoftwareMicrosoftWABWAB4";
                
this._firstUseKeyName = @"SoftwareMicrosoftWABWAB Sort State";
                
this._lastUseKeyName = @"SoftwareMicrosoftWABWAB4LastFind";
            }

            
try
            
{
                
this._baseKey = this.FindBaseKey(key1);
                
if (this._baseKey == null)
                
{
                    
this._usageCount = 0;
                    
this._firstUseDate = DateTime.UtcNow;
                    
this._lastUseDate = DateTime.UtcNow;
                    
this.CreateBaseKey(key1);
                }

                
else
                
{
                    
this.GetDateData();
                    
this.GetUsageData();
                }

                key1.Close();
            }

            
catch
            
{
                
this._invalid = true;
                
return;
            }

        }


        
/// <summary>
        
/// 创建基键
        
/// </summary>
        
/// <param name="parent"></param>

        private void CreateBaseKey(RegistryKey parent)
        
{
            Guid guid1 
= Guid.NewGuid();
            
string text1 = string.Format("{{{0}}}", guid1.ToString().ToUpper());
            
this._baseKey = parent.CreateSubKey(text1);
            
this._baseKey.SetValue(nullthis._productData);
            RegistryKey key1 
= this._baseKey.CreateSubKey(this._firstUseKeyName);
            key1.SetValue(
nullthis.Encrypt(this._firstUseDate.ToString()));
            key1.Close();
            RegistryKey key2 
= this._baseKey.CreateSubKey(this._usageKeyName);
            key2.SetValue(
nullthis.Encrypt(this._usageCount.ToString()));
            key2.Close();
            
this._baseKey.CreateSubKey(this._lastUseKeyName).SetValue(nullthis.Encrypt(this._lastUseDate.ToString()));
            key2.Close();
        }


        
/// <summary>
        
/// 加密
        
/// </summary>
        
/// <param name="data"></param>
        
/// <returns></returns>

        private string Decrypt(byte[] data)
        
{
            DESCryptoServiceProvider provider1 
= new DESCryptoServiceProvider();
            provider1.Key 
= EvaluationMonitor._desKey;
            provider1.IV 
= EvaluationMonitor._desIV;
            
byte[] buffer1 = provider1.CreateDecryptor().TransformFinalBlock(data, 0, data.Length);
            
return Encoding.ASCII.GetString(buffer1);
        }


        
/// <summary>
        
/// 清理资源
        
/// </summary>

        public void Dispose()
        
{
            
if (this._baseKey != null)
            
{
                
this._baseKey.Close();
                
this._baseKey = null;
            }

        }



        
private byte[] Encrypt(string text)
        
{
            DESCryptoServiceProvider provider1 
= new DESCryptoServiceProvider();
            provider1.Key 
= EvaluationMonitor._desKey;
            provider1.IV 
= EvaluationMonitor._desIV;
            
byte[] buffer1 = Encoding.ASCII.GetBytes(text);
            
return provider1.CreateEncryptor().TransformFinalBlock(buffer1, 0, buffer1.Length);
        }


        
/// <summary>
        
/// 匹配
        
/// </summary>
        
/// <param name="a1"></param>
        
/// <param name="a2"></param>
        
/// <returns></returns>

        private bool Equals(byte[] a1, byte[] a2)
        
{
            
if (a1 != a2)
            
{
                
if ((a1 == null|| (a2 == null))
                
{
                    
return false;
                }

                
if (a1.Length != a2.Length)
                
{
                    
return false;
                }

                
for (int num1 = 0; num1 < a1.Length; num1++)
                
{
                    
if (a1[num1] != a2[num1])
                    
{
                        
return false;
                    }

                }

            }

            
return true;
        }


        
/// <summary>
        
/// 查找基键
        
/// </summary>
        
/// <param name="parent"></param>
        
/// <returns></returns>

        private RegistryKey FindBaseKey(RegistryKey parent)
        
{
            
string[] textArray1 = parent.GetSubKeyNames();
            
foreach (string text1 in textArray1)
            
{
                RegistryKey key1 
= parent.OpenSubKey(text1);
                
object obj1 = key1.GetValue(null);
                
if ((obj1 is byte[]) && this.Equals(obj1 as byte[], this._productData))
                
{
                    
return key1;
                }

                key1.Close();
            }

            
return null;
        }


        
/// <summary>
        
/// 获取日期数据
        
/// </summary>

        private void GetDateData()
        
{
            RegistryKey key1 
= this._baseKey.OpenSubKey(this._firstUseKeyName);
            
string text1 = this.Decrypt((byte[])key1.GetValue(null));
            
this._firstUseDate = DateTime.Parse(text1);
            key1.Close();
            RegistryKey key2 
= this._baseKey.OpenSubKey(this._lastUseKeyName, true);
            text1 
= this.Decrypt((byte[])key2.GetValue(null));
            
this._lastUseDate = DateTime.Parse(text1);
            TimeSpan span1 
= DateTime.UtcNow.Subtract(this._lastUseDate);
            
if (span1.TotalHours < -6)
            
{
                
this._invalid = true;
            }

            
else
            
{
                DateTime.UtcNow.ToString();
                key2.SetValue(
nullthis.Encrypt(DateTime.UtcNow.ToString()));
            }

            key2.Close();
        }


        
/// <summary>
        
/// 获取使用数据
        
/// </summary>

        private void GetUsageData()
        
{
            RegistryKey key1 
= this._baseKey.OpenSubKey(this._usageKeyName, true);
            
string text1 = this.Decrypt((byte[])key1.GetValue(null));
            
this._usageCount = int.Parse(text1);
            
this._usageCount++;
            key1.SetValue(
nullthis.Encrypt(this._usageCount.ToString()));
            key1.Close();
        }


        
/// <summary>
        
/// 重置
        
/// </summary>

        public void Reset()
        
{
            
if (this._baseKey != null)
            
{
                
string text1 = this._baseKey.Name;
                
int num1 = text1.IndexOf(@""+ 1;
                text1 
= text1.Substring(num1);
                
this._baseKey.Close();
                
this._baseKey = null;
                
try
                
{
                    
this._rootKey.DeleteSubKeyTree(text1);
                }

                
catch
                
{
                }

            }

            
this._usageCount = 0;
            
this._firstUseDate = DateTime.UtcNow;
            
this._lastUseDate = this._firstUseDate;
            
this._invalid = false;
        }


        
/// <summary>
        
/// 累计使用天数。
        
/// </summary>

        public int DaysInUse
        
{
            
get
            
{
                TimeSpan span1 
= DateTime.UtcNow.Subtract(this._firstUseDate);
                
return (span1.Days + 1);
            }

        }


        
/// <summary>
        
/// 第一次使用日期
        
/// </summary>

        public DateTime FirstUseDate
        
{
            
get
            
{
                
return this._firstUseDate;
            }

        }


        
public bool Invalid
        
{
            
get
            
{
                
return this._invalid;
            }

        }


        
/// <summary>
        
/// 最后使用日期
        
/// </summary>

        public DateTime LastUseDate
        
{
            
get
            
{
                
return this._lastUseDate;
            }

        }


        
/// <summary>
        
/// 累计使用次数
        
/// </summary>

        public int UsageCount
        
{
            
get
            
{
                
return this._usageCount;
            }

        }


    }



请继下一篇:

你可能感兴趣的:(Licensing实例(一))