Licensing实例(一)

    技术2022-05-11  74

    说明:由于人很懒,并且时间的关系。我不一一说明前因后果。一般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;            }        }    }

    请继下一篇:


    最新回复(0)