public void SetLicense(Type type, LicFileLicense license) { SetSavedLicenseKey(type, license.LicenseKey); licenses[type] = license; }
//protected abstract string LicenseName //{ // get; //} public override License GetLicense(LicenseContext c, Type type, object instance, bool allowExceptions) { ALinqLicenseContext context; if (c is ALinqLicenseContext) { context = (ALinqLicenseContext)c; } else { context = new ALinqLicenseContext(); } LicenseManager.CurrentContext = context; LicFileLicense license = context.GetSavedLicense(type); if (license == null) { #region Read license from Attribute if (instance is DataContext) { var attributes = instance.GetType().GetCustomAttributes(true) .Where(o => o is LicenseAttribute).Cast <LicenseAttribute>(); var count = attributes.Count(); if (count == 1) { var attribute = attributes.Single(); license = new LicFileLicense(this, attribute.UserName, attribute.Key, null); } } #endregion #region Read license from alinq.lic if (license == null) { Assembly assembly = null; if (instance is DataContext && instance.GetType() != typeof(DataContext)) { assembly = instance.GetType().Assembly; } Assembly licenseFileAssembly; var stream = SearchLicenseStream(assembly, out licenseFileAssembly); if (stream != null) { string userName; string key; string assemblyName; CultureInfo culture; ParseLicense(type, instance, stream, out userName, out key, out assemblyName, out culture); stream.Dispose(); //============================================================================== // 说明:key 允许为空,当为 Free 版本时 // if (key == null) // throw Error.LicenseFail(type, instance, string.Format("The {0} license key could not found in the ALinq.lic file.", type)); //============================================================================== if (assemblyName != licenseFileAssembly.GetName().Name) { throw Error.AssemblyNameNotMatch(type, instance, assemblyName, licenseFileAssembly.GetName().Name); } license = new LicFileLicense(this, userName, key, culture); } } #endregion #region Read license from registry. //if (license == null) //{ // var platform = Environment.OSVersion.Platform; // if (platform == PlatformID.Win32NT || platform == PlatformID.Win32S || // platform == PlatformID.Win32Windows || platform == PlatformID.Win32Windows) // { // try // { // var regALinq = Registry.ClassesRoot.OpenSubKey("SOFTWARE\\ALinq", true); // if (regALinq != null) // { // var obj = regALinq.GetValue("PreLoad"); // if (obj == null) // { // obj = DateTime.Now.ToString("yyyy-MM-dd"); // var bs = Encoding.ASCII.GetBytes((string)obj); // obj = Convert.ToBase64String(bs); // regALinq.SetValue("PreLoad", obj); // } // var preLoad = (string)obj; // var bytes = Convert.FromBase64String(preLoad); // var strDate = Encoding.ASCII.GetString(bytes); // var date = DateTime.Parse(strDate); // if (date > DateTime.Now) // throw Error.LicenseFail(type, instance, "This software is expired."); // else // { // var data = Encoding.ASCII.GetBytes(DateTime.Now.ToString()); // var str = Convert.ToBase64String(data); // regALinq.SetValue("PreLoad", str); // } // obj = regALinq.GetValue("Date"); // if (obj == null) // { // obj = DateTime.Now.ToString("yyyy-MM-dd"); // var bs = Encoding.ASCII.GetBytes((string)obj); // obj = Convert.ToBase64String(bs); // regALinq.SetValue("Date", obj); // } // var encryptDate = (string)obj; // bytes = Convert.FromBase64String(encryptDate); // strDate = Encoding.ASCII.GetString(bytes); // date = DateTime.Parse(strDate); // var days = DAYS - (DateTime.Now - date).Days; // license = new LicFileLicense(this, Constants.TrialUserName, date.ToString(), null) { ExpiredDays = days }; // } // } // catch (Exception exc) // { // if (exc is LicenseException) // throw; // } // } //} #endregion if (license != null) { //licenses[type] = license; context.SetLicense(type, license);//.SetSavedLicenseKey(type, license.LicenseKey); } } if (license == null) { throw new LicenseException(type, instance, string.Format("Found license fail!")); } //验证授权 ValidateLicense(type, instance, license); return(license); }