提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|行业资讯|编辑:蒋永|2017-06-16 10:48:26.000|阅读 2074 次
概述:代码控制许可证的意思就是软件经过.net reactor保护后,到期时客户端就需要购买许可证,这时软件开发商就需要生成许可证等操作,这个操作可以由代码控制来达到自动化的效果。当然不仅仅是生成操作,还包扩获取许可证的信息,作废许可证,激活许可证等操作。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
上篇已经学习了界面的各种功能以及各种配置,本次带大家学习下代码控制许可证。
代码控制许可证的意思就是软件经过.net reactor保护后,到期时客户端就需要购买许可证,这时软件开发商就需要生成许可证等操作,这个操作可以由代码控制来达到自动化的效果。当然不仅仅是生成操作,还包扩获取许可证的信息,作废许可证,激活许可证等操作。
在安装目录下...\.NET Reactor\SDK\Binaries文件夹下可以找到License.dll和LicenseGen.dll(.net编写 .net reactor是一个.net 编写的程序)。其中License.dll主要用于获取许可证信息,作废许可证,激活许可证等,可整合到软件项目中,而LicenseGen.dll主要用于生成许可证,不可整合,可以用于许可证自动生成的服务。
首先看下许可证生成代码:
/// <summary> /// 创建许可证 /// </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; //使用持续时间锁 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("是否开启持续时间锁:{0},规定使用最大持续时间{1},现在使用时间{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()); //使用次数锁 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("是否开启使用次数锁:{0},最大使用次数{1},当前使用次数{2}\n", lock_enabled2.ToString(), max_uses.ToString(), current_uses.ToString()); //并发运行锁 bool lock_enabled3 = License.Status.Number_Of_Instances_Lock_Enable; int max_instances = License.Status.Number_Of_Instances; rtnStr += string.Format("是否限制并行数量:{0},最大并行数量:{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来根据硬件编码生成激活码,传入即可激活许可证。(这里生成激活码我只找到在工具里可视化操作,在代码中找不到这种方法,所以这个应用场景不太适合许可证全自动化的管理)。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
通过提供强大的3D CAD数据访问工具并适用于桌面、移动和Web的高级环境3D可视化发动机,HOOPS在提升造船设计和制造流程的效率方面发挥了重要作用。
HOOPS Luminate在汽车行业中的应用具有广泛的潜力和深远的影响。它通过提供高效的3D可视化、虚拟装配与拆解、性能分析、客户定制等功能,帮助汽车制造商在设计、生产和销售过程中提升效率、降低成本并提高产品质量。
在不断发展的软件开发世界中,使工具和框架与最新的平台版本保持同步至关重要,欢迎查阅~
全球航运业对国际贸易至关重要,全球 90% 以上的商品通过海运运输。准确监控和控制这些集装箱的移动对于维持高效的供应链至关重要。手动输入集装箱号码是这一程序的关键部分,它带来了相当大的挑战,例如人为错误和效率低下。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢