.net reactor使用教程(二)——代碼自動操作相關保護功能
上篇已經學習了界面的各種功能以及各種配置,本次帶大家學習下代碼控制許可證。
代碼控制許可證的意思就是軟件經過.net reactor保護后,到期時客戶端就需要購買許可證,這時軟件開發(fā)商就需要生成許可證等操作,這個操作可以由代碼控制來達到自動化的效果。當然不僅僅是生成操作,還包擴獲取許可證的信息,作廢許可證,激活許可證等操作。
在安裝目錄下...\.NET Reactor\SDK\Binaries文件夾下可以找到License.dll和LicenseGen.dll(.net編寫 .net reactor是一個.net 編寫的程序)。其中License.dll主要用于獲取許可證信息,作廢許可證,激活許可證等,可整合到軟件項目中,而LicenseGen.dll主要用于生成許可證,不可整合,可以用于許可證自動生成的服務。
首先看下許可證生成代碼:
/// <summary> /// 創(chuàng)建許可證 /// </summary> /// <param name="project_filename"></param> private void CreateLicenseFile() { LicenseGenerator licensegen = new LicenseGenerator(); licensegen.AddAdditonalLicenseInformation("Company", "Eye"); licensegen.Hardware_Enabled = true; licensegen.HardwareID = "1234-1234-1234-1234-1234"; licensegen.CreateLicenseFile(@"C:\newlicense.license"); }
這將會在c盤下生成newlicense.license許可證文件,文件的內容包括添加進去的鍵值對Company-Eye,開啟硬件鎖,此許可證只針對硬件編碼為1234-1234-1234-1234-1234的機器有效。
再來看看License.dll的功能:
/// <summary> /// 許可證是否可用 /// </summary> /// <returns></returns> private bool IsValidLicenseAvailable() { return License.Status.Licensed; } /// <summary> /// 獲取許可證鍵值信息 /// </summary> private string ReadAdditonalLicenseInformation() { string rtnStr = string.Empty; if (License.Status.Licensed) { for (int i = 0; i < License.Status.KeyValueList.Count; i++) { string key = License.Status.KeyValueList.GetKey(i).ToString(); string value = License.Status.KeyValueList.GetByIndex(i).ToString(); rtnStr += key + "-" + value + Environment.NewLine; } } return rtnStr; } /// <summary> /// 獲取軟件鎖定信息 /// </summary> /// <returns></returns> private string ReadLockMsg() { string rtnStr = string.Empty; //使用持續(xù)時間鎖 bool lock_enabled = License.Status.Evaluation_Lock_Enabled; License.EvaluationType ev_type = License.Status.Evaluation_Type; int time = License.Status.Evaluation_Time; int time_current = License.Status.Evaluation_Time_Current; rtnStr += string.Format("是否開啟持續(xù)時間鎖:{0},規(guī)定使用最大持續(xù)時間{1},現(xiàn)在使用時間{2}\n",lock_enabled.ToString(),time.ToString(),time_current.ToString()); //到期鎖 bool lock_enabled1 = License.Status.Expiration_Date_Lock_Enable; System.DateTime expiration_date = License.Status.Expiration_Date; rtnStr += string.Format("是否開啟到期鎖:{0},到期時間{1}\n", lock_enabled1.ToString(), expiration_date.ToShortTimeString()); //使用次數(shù)鎖 bool lock_enabled2 = License.Status.Number_Of_Uses_Lock_Enable; int max_uses = License.Status.Number_Of_Uses; int current_uses = License.Status.Number_Of_Uses_Current; rtnStr += string.Format("是否開啟使用次數(shù)鎖:{0},最大使用次數(shù){1},當前使用次數(shù){2}\n", lock_enabled2.ToString(), max_uses.ToString(), current_uses.ToString()); //并發(fā)運行鎖 bool lock_enabled3 = License.Status.Number_Of_Instances_Lock_Enable; int max_instances = License.Status.Number_Of_Instances; rtnStr += string.Format("是否限制并行數(shù)量:{0},最大并行數(shù)量:{1}\n", lock_enabled3, max_instances.ToString()); //硬件鎖 bool lock_enabled4 = License.Status.Hardware_Lock_Enabled; string lic_hardware_id = ""; if (lock_enabled) { lic_hardware_id = License.Status.License_HardwareID; } rtnStr += string.Format("證書是否開啟硬件鎖{0},對于特定硬件的有效{1}\n", lock_enabled4.ToString(), lic_hardware_id); return rtnStr; } /// <summary> /// 獲取機器硬件編號 /// </summary> /// <returns></returns> private string GetHardwareID() { return License.Status.HardwareID; } /// <summary> /// 獲取許可證適用的硬件編碼 /// </summary> /// <returns></returns> private string GetLicenseHardwareID() { return License.Status.License_HardwareID; } /// <summary> /// 作廢許可證 /// </summary> private string InvalidateLicense() { string confirmation_code = License.Status.InvalidateLicense(); return confirmation_code; } /// <summary> /// 檢查作廢許可證的驗證碼是否有效 /// </summary> /// <param name="confirmation_code"></param> /// <returns></returns> public bool CheckConfirmationCode(string confirmation_code) { return License.Status.CheckConfirmationCode(License.Status.HardwareID, confirmation_code); } /// <summary> /// 重新激活許可證 /// </summary> /// <param name="reactivation_code"></param> /// <returns></returns> public bool ReactivateLicense(string reactivation_code) { return License.Status.ReactivateLicense(reactivation_code); }
其中作廢許可證及激活許可證的主要應用場景是:如果許可證開啟硬件鎖,客戶端想從一個機器移動許可證到另一個機器此時就需要先作廢許可證,然后在新機器里重新激活許可證。作廢許可證可直接調用即可,但是激活許可證需要打開Tools->LicenseReactivation Tool來根據(jù)硬件編碼生成激活碼,傳入即可激活許可證。(這里生成激活碼我只找到在工具里可視化操作,在代碼中找不到這種方法,所以這個應用場景不太適合許可證全自動化的管理)。