diff --git a/src/TestDemo1/TestCommand.cs b/src/TestDemo1/TestCommand.cs index 5cb9529..a0089ab 100644 --- a/src/TestDemo1/TestCommand.cs +++ b/src/TestDemo1/TestCommand.cs @@ -7,29 +7,14 @@ using System.Windows; namespace TestDemo1 { + [Checker("AOP TestDemo")] [Transaction(TransactionMode.Manual)] public class TestCommand : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { - var a = new A(); - a.B(); + MessageBox.Show("Executed"); return Result.Succeeded; } - - } - - -} - -namespace Autodesk.Revit.UI -{ - [Checker("uBIM ReCAD")] - public class A - { - public void B() - { - MessageBox.Show("121"); - } } } \ No newline at end of file diff --git a/src/TestDemo1/TestDemo1.csproj b/src/TestDemo1/TestDemo1.csproj index 751b7de..2996286 100644 --- a/src/TestDemo1/TestDemo1.csproj +++ b/src/TestDemo1/TestDemo1.csproj @@ -3,14 +3,23 @@ net472 e809dde1-3dc4-4ca0-bcb9-65c8473f590e + true + + + + $(DefineConstants)TRACE + + + + $(DefineConstants)TRACE - - - - + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/uBIM.Checker.AOP/AboutForm.Designer.cs b/src/uBIM.Checker.AOP/AboutForm.Designer.cs new file mode 100644 index 0000000..32746f8 --- /dev/null +++ b/src/uBIM.Checker.AOP/AboutForm.Designer.cs @@ -0,0 +1,138 @@ +using System; +using System.Windows.Forms; + +namespace uBIM.Checker.AOP +{ + partial class AboutForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.linkLabel_Version = new System.Windows.Forms.LinkLabel(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.label_Info = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + + // + // linkLabel_Version + // + this.linkLabel_Version.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.linkLabel_Version.Location = new System.Drawing.Point(106, 54); + this.linkLabel_Version.Name = "linkLabel_Version"; + this.linkLabel_Version.Size = new System.Drawing.Size(123, 25); + this.linkLabel_Version.TabIndex = 0; + this.linkLabel_Version.TabStop = true; + this.linkLabel_Version.Text = "版本:20xx"; + this.linkLabel_Version.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.toolTip1.SetToolTip(this.linkLabel_Version, "点击检查版本更新"); + this.linkLabel_Version.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel_Version_LinkClicked); + // + // label_Info + // + this.label_Info.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label_Info.AutoSize = true; + this.label_Info.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label_Info.Location = new System.Drawing.Point(9, 101); + this.label_Info.Name = "label_Info"; + this.label_Info.Size = new System.Drawing.Size(152, 51); + this.label_Info.TabIndex = 2; + this.label_Info.Text = "内部版本:1.0.0.0\r\n广州优比建筑咨询有限公司\r\nhttp://www.u-bim.com"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("微软雅黑", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.Location = new System.Drawing.Point(103, 21); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(149, 28); + this.label2.TabIndex = 3; + this.label2.Text = "uBIM ReCAD"; + // + // pictureBox1 + // + //this.pictureBox1.Image = global::uBIM.ReCAD.App.Properties.Resources.uBIM; + this.pictureBox1.Location = new System.Drawing.Point(12, 12); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(77, 77); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox1.TabIndex = 4; + this.pictureBox1.TabStop = false; + this.pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown); + // + // AboutForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(494, 161); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.label2); + this.Controls.Add(this.label_Info); + this.Controls.Add(this.linkLabel_Version); + + + this.linkLabel_ActivateState = new System.Windows.Forms.LinkLabel(); + // + // linkLabel_ActivateState + // + this.linkLabel_ActivateState.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.linkLabel_ActivateState.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.linkLabel_ActivateState.Location = new System.Drawing.Point(332, 117); + this.linkLabel_ActivateState.Name = "linkLabel_ActivateState"; + this.linkLabel_ActivateState.Size = new System.Drawing.Size(150, 35); + this.linkLabel_ActivateState.TabIndex = 1; + this.linkLabel_ActivateState.TabStop = true; + this.linkLabel_ActivateState.Text = "未激活"; + this.linkLabel_ActivateState.TextAlign = System.Drawing.ContentAlignment.BottomRight; + this.linkLabel_ActivateState.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel_ActivateState_LinkClicked); + this.Controls.Add(this.linkLabel_ActivateState); + + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AboutForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "uBIM ReCAD - 关于"; + this.Load += new System.EventHandler(this.HelpForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.LinkLabel linkLabel_ActivateState; + private System.Windows.Forms.LinkLabel linkLabel_Version; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Label label_Info; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.PictureBox pictureBox1; + } +} \ No newline at end of file diff --git a/src/uBIM.Checker.AOP/AboutForm.cs b/src/uBIM.Checker.AOP/AboutForm.cs new file mode 100644 index 0000000..48e5e54 --- /dev/null +++ b/src/uBIM.Checker.AOP/AboutForm.cs @@ -0,0 +1,146 @@ +using System; +using System.IO; +using System.Reflection; +using System.Resources; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml; + +namespace uBIM.Checker.AOP +{ + internal partial class AboutForm : Form + { + private const string key_a = "oNr4T8oRvbqOtswFcRI0jlhy15IUJ6Mi8bHWAyW/bVxPxj3Lga2ZhYgwqA01fLcNfO9tPq63Vfxksbw4p7V5+GzAsYhS1Hs6QGzilKiZB2jjjKSctWTZZCfcURVGsQLcKDz1JlMbT8/M8mNbgIzKI6UiXtxBiWFf8POLoOk5z1s=AQAB

2F+DlaY2KPUUoMwgyauR92ZnGEdrCL1+9YtEQLiQ5f/EkkosVy3rdCF+39b6uP5puzqvb7QftuWL0aTLBcEnoQ==

vlCMj5gv+fDAOdOsz1Ma8JRe2R8TcSN22vx63tvrA5gvxgfFPzume/WJRADNtCzfklkGrOXmit80vfgxN0Glew==w8+keFCj4OryURaKcZeoEDmHAQzYy18aP0JacSvWTZ7qmO0xNXAkDcOmWxHlcnci3kKcs71RmiYgI4g8BygnIQ==Doi+Q1UfDNp7A6+LugWhwA/EspYx+Oj5cb3ocE6hQxQDSf9b6/lVPJBC3GOnUgQ/SsDrxpaEJcToFT34HD0yMw==MlY+l+X4Nu++oHi/UeSuNVKB3uKTCG3q2rq/fJa5HpOmrwrAblOT50HWb/4DOzp4t/2vKuq92yf4iLokVWMt0A==ZMpwN0bNsQ25qQ7UBhK7PcpsQ2l0GZYeKkYdbKF1fmgOUJCd+Oa3QLWij1qffkMRP4yi7lj55fYdfkULVwLepm1hxE5aGf5c/36JO0QqmrUVppPaz7SR8EnmYwMKJD1tv/puzXfDA8+upFYiCfg+SF/+svxMUVw3mK21dhe27EE=
"; + private const string key_b = "wK0zy1DkjYBpu9rzXzP9ScqWfxfAv5mOUtbf1Hom4BJREYBoXuRh3kqu8HQuT9nO2/o8nDi52vAJKHVZPZKrKNifYLOAHj4gWIO8qYrWrR9wAYTvhM/cLxXrs3/C3sflCny4A0QPnbkzpDJo/lGaybUpEDG2SNMBYVRO/TVQ5N0=AQAB

6RP6kmHLZARPM1r2VTnDb6z4AoWgqzrgMs5fVzYcqjo/50mXYgjgegf7EvhehCbOUTQwjB/EvS/s3xzgBCpE0w==

06ARVWAid/k61Q7C7dBOW7Dz0SXXdql+OuxcwnVOo0lg1+R+m1zWTYDPB4DUqCr9foNHbMz095/zufWnAY3hjw==o5l7ax4rtmNz+Dcj6sRl0tBVMOf809O6pM7Iix2XV0EVs9Gq6YwTjHRnnnQpW5clgEgiv2hZHvYxzJWnBCVrMw==WB89WInRkJfNsc6VySWGm5PR03OohxcJI0wtTCRA/KmflAbn2ZYM/vT2QK+a3fQY3seXxGyMTVjjyrnKM1F7bQ==yqPGPSBXIG8FF3m0Rk4doXNcE1ljUeKSZCOo0iblfH4DYrBOIKg9+YQn9F5mA045IFZxMyXoSGZw0BLSEfA/pQ==ruAE9HHVHsEANmpBHZV4PHNNKMkMPlpGnNU9jgHYKuM1BSeAky/BzBoIsWEhb4QGhg2W2Ut7FEVsanYnqwTlprdmXi4VzqAjazjvS/o+sHQbfejIFKIJHC6rUsAsZLkclPZcqyjJqDyLjyrOj5ilqRuIgFp6RhVnZKmL9NC6V5k=
"; + private string _title; + public AboutForm(string title) + { + InitializeComponent(); + _title = title; + string[] temp = Common.AssemblyFileVersion().Split('.'); + linkLabel_Version.Text = $"版本:20{temp[1]}"; + this.Text = $"{_title} - 关于"; + this.label2.Text = $"{_title}"; + } + + + private void HelpForm_Load(object sender, EventArgs e) + { + this.label_Info.Text = string.Format("内部版本:{0}\r\n广州优比建筑咨询有限公司\r\nhttp://www.u-bim.com", Common.AssemblyFileVersion()); + RefreshActivateState(); + } + + private void linkLabel_ActivateState_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + LicenseChecker.Instance.Checker.Activate($"{_title}" + , Common.GetDeviceCode() + , string.Format("={0}=", Common.GetMd5Hash("|><=><|")) + , key_a + , key_b); + RefreshActivateState(); + Task.Run(() => + { + Task.Delay(5000).Wait(); + //激活成功 + if (!LicenseChecker.Instance.Checker.OutLimit && LicenseChecker.Instance.Checker.LimitDate != DateTime.MinValue) + { + DateTime nowTime = uBIM.Utils.General.GetNetTime(); + if (nowTime == DateTime.MinValue) + { + nowTime = DateTime.Now; + } + string strEncrypt; + //根据有效期天数是否是试用激活 + if (LicenseChecker.Instance.Checker.LimitDate <= nowTime.Date.AddDays(5)) + { + //试用 + strEncrypt = uBIM.Utils.DESHelper.EncryptDES($"{_title}*{Common.GetDeviceCode()}*0"); + } + else + { + //非试用 + strEncrypt = uBIM.Utils.DESHelper.EncryptDES($"{_title}*{Common.GetDeviceCode()}*1"); + } + //往磁盘写入是否试用标识信息 + Common.WirteStringData(strEncrypt, Common.TRY_INFO_FILE_PATH); + } + if (!IsClosed()) + { + this.BeginInvoke((Action)RefreshActivateState); + } + }); + } + + private bool IsClosed() + { + bool result = true; + foreach (Form form in Application.OpenForms) + { + if (form.Name == this.Name) + { + result = false; + break; + } + } + return result; + } + + private void RefreshActivateState() + { + if (LicenseChecker.Instance.Checker.OutLimit || LicenseChecker.Instance.Checker.LimitDate == DateTime.MinValue) + { + this.linkLabel_ActivateState.Enabled = true; + if (LicenseChecker.Instance.Checker.LimitDate == DateTime.MinValue) + { + this.linkLabel_ActivateState.Text = "未激活"; + } + else + { + if (LicenseChecker.Instance.Checker.OutLimit || DateTime.Now.Date > LicenseChecker.Instance.Checker.LimitDate) + { + this.linkLabel_ActivateState.Text = string.Format("{0}\r\n有效期至:{1}", "已过期", LicenseChecker.Instance.Checker.LimitDate.ToString("yyyy-MM-dd")); + } + } + } + else + { + this.linkLabel_ActivateState.Text = string.Format("{0}\r\n有效期至:{1}", "已激活", LicenseChecker.Instance.Checker.LimitDate.ToString("yyyy-MM-dd")); + this.linkLabel_ActivateState.Enabled = false; + } + } + + + private void linkLabel_Version_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + } + + private int sumMouseDown; + private void pictureBox1_MouseDown(object sender, MouseEventArgs e) + { + if ((ModifierKeys & Keys.Control) == Keys.Control) + { + if (!LicenseChecker.Instance.CheckLicenseState(_title, false)) + { + return; + } + + sumMouseDown++; + if (sumMouseDown == 3) + { + if (DialogResult.Yes == MessageBox.Show("确定需要注销激活吗?", $"{_title} - 注销", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) + { + if (LicenseChecker.Instance.Checker.UnActivate($"{_title}")) + { + this.Close(); + } + } + sumMouseDown = 0; + } + } + else + { + sumMouseDown = 0; + } + } + } +} diff --git a/src/uBIM.Checker.AOP/AboutForm.resx b/src/uBIM.Checker.AOP/AboutForm.resx new file mode 100644 index 0000000..37892e8 --- /dev/null +++ b/src/uBIM.Checker.AOP/AboutForm.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + <RSAKeyValue><Modulus>oNr4T8oRvbqOtswFcRI0jlhy15IUJ6Mi8bHWAyW/bVxPxj3Lga2ZhYgwqA01fLcNfO9tPq63Vfxksbw4p7V5+GzAsYhS1Hs6QGzilKiZB2jjjKSctWTZZCfcURVGsQLcKDz1JlMbT8/M8mNbgIzKI6UiXtxBiWFf8POLoOk5z1s=</Modulus><Exponent>AQAB</Exponent><P>2F+DlaY2KPUUoMwgyauR92ZnGEdrCL1+9YtEQLiQ5f/EkkosVy3rdCF+39b6uP5puzqvb7QftuWL0aTLBcEnoQ==</P><Q>vlCMj5gv+fDAOdOsz1Ma8JRe2R8TcSN22vx63tvrA5gvxgfFPzume/WJRADNtCzfklkGrOXmit80vfgxN0Glew==</Q><DP>w8+keFCj4OryURaKcZeoEDmHAQzYy18aP0JacSvWTZ7qmO0xNXAkDcOmWxHlcnci3kKcs71RmiYgI4g8BygnIQ==</DP><DQ>Doi+Q1UfDNp7A6+LugWhwA/EspYx+Oj5cb3ocE6hQxQDSf9b6/lVPJBC3GOnUgQ/SsDrxpaEJcToFT34HD0yMw==</DQ><InverseQ>MlY+l+X4Nu++oHi/UeSuNVKB3uKTCG3q2rq/fJa5HpOmrwrAblOT50HWb/4DOzp4t/2vKuq92yf4iLokVWMt0A==</InverseQ><D>ZMpwN0bNsQ25qQ7UBhK7PcpsQ2l0GZYeKkYdbKF1fmgOUJCd+Oa3QLWij1qffkMRP4yi7lj55fYdfkULVwLepm1hxE5aGf5c/36JO0QqmrUVppPaz7SR8EnmYwMKJD1tv/puzXfDA8+upFYiCfg+SF/+svxMUVw3mK21dhe27EE=</D></RSAKeyValue> + + + <RSAKeyValue><Modulus>wK0zy1DkjYBpu9rzXzP9ScqWfxfAv5mOUtbf1Hom4BJREYBoXuRh3kqu8HQuT9nO2/o8nDi52vAJKHVZPZKrKNifYLOAHj4gWIO8qYrWrR9wAYTvhM/cLxXrs3/C3sflCny4A0QPnbkzpDJo/lGaybUpEDG2SNMBYVRO/TVQ5N0=</Modulus><Exponent>AQAB</Exponent><P>6RP6kmHLZARPM1r2VTnDb6z4AoWgqzrgMs5fVzYcqjo/50mXYgjgegf7EvhehCbOUTQwjB/EvS/s3xzgBCpE0w==</P><Q>06ARVWAid/k61Q7C7dBOW7Dz0SXXdql+OuxcwnVOo0lg1+R+m1zWTYDPB4DUqCr9foNHbMz095/zufWnAY3hjw==</Q><DP>o5l7ax4rtmNz+Dcj6sRl0tBVMOf809O6pM7Iix2XV0EVs9Gq6YwTjHRnnnQpW5clgEgiv2hZHvYxzJWnBCVrMw==</DP><DQ>WB89WInRkJfNsc6VySWGm5PR03OohxcJI0wtTCRA/KmflAbn2ZYM/vT2QK+a3fQY3seXxGyMTVjjyrnKM1F7bQ==</DQ><InverseQ>yqPGPSBXIG8FF3m0Rk4doXNcE1ljUeKSZCOo0iblfH4DYrBOIKg9+YQn9F5mA045IFZxMyXoSGZw0BLSEfA/pQ==</InverseQ><D>ruAE9HHVHsEANmpBHZV4PHNNKMkMPlpGnNU9jgHYKuM1BSeAky/BzBoIsWEhb4QGhg2W2Ut7FEVsanYnqwTlprdmXi4VzqAjazjvS/o+sHQbfejIFKIJHC6rUsAsZLkclPZcqyjJqDyLjyrOj5ilqRuIgFp6RhVnZKmL9NC6V5k=</D></RSAKeyValue> + + + + 17, 17 + + \ No newline at end of file diff --git a/src/uBIM.Checker.AOP/Checker.cs b/src/uBIM.Checker.AOP/Checker.cs index d38ebe4..337eaa0 100644 --- a/src/uBIM.Checker.AOP/Checker.cs +++ b/src/uBIM.Checker.AOP/Checker.cs @@ -5,7 +5,9 @@ using System.Linq; namespace uBIM.Checker.AOP { - [Injection(typeof(CkeckerAspect))] +#if !DEBUG + [Injection(typeof(CheckerAspect))] +#endif public class CheckerAttribute : Attribute { public string Title { get; } @@ -17,7 +19,7 @@ namespace uBIM.Checker.AOP } [Aspect(Scope.PerInstance)] - public class CkeckerAspect + public class CheckerAspect { [Advice(Kind.Around, Targets = Target.Method)] public object DoCheck([Argument(Source.Instance)] object obj, [Argument(Source.Triggers)] Attribute[] triggers, [Argument(Source.Target)] Func target, [Argument(Source.Arguments)] object[] args) @@ -30,10 +32,18 @@ namespace uBIM.Checker.AOP { return target(args); } + AboutForm aboutForm = new AboutForm(checker.Title); + aboutForm.ShowDialog(); return Result.Cancelled; } else { + if (LicenseChecker.Instance.CheckLicenseState(checker.Title, false)) + { + return target(args); + } + AboutForm aboutForm = new AboutForm(checker.Title); + aboutForm.ShowDialog(); if (LicenseChecker.Instance.CheckLicenseState(checker.Title, false)) { return target(args); diff --git a/src/uBIM.Checker.AOP/Common.cs b/src/uBIM.Checker.AOP/Common.cs new file mode 100644 index 0000000..001e758 --- /dev/null +++ b/src/uBIM.Checker.AOP/Common.cs @@ -0,0 +1,978 @@ +using Microsoft.Win32; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Management; +using System.Net; +using System.Reflection; +using System.Runtime.ExceptionServices; +using System.Runtime.InteropServices; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; +using System.Security; +using System.Security.AccessControl; +using System.Security.Cryptography; +using System.Text; +using System.Windows; +using System.Windows.Media; +using System.Xml; +using MessageBox = System.Windows.MessageBox; + +namespace uBIM.Checker.AOP +{ + public class Common + { + /// + /// 强制窗口在前 + /// + /// + /// + [DllImport("user32.dll")] + public static extern bool SetForegroundWindow(IntPtr hWnd); + + /// + /// 激活窗口 + /// + /// + /// + [DllImport("user32.dll")] + public static extern bool SetActiveWindow(IntPtr hWnd); + + #region 试用信息文件路径 + public static readonly string TRY_INFO_FILE_PATH = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\" + AssemblyFileProductName() + "\\try_info.dat"; + #endregion + + #region 有效期的文件路径 + /// + /// 有效期的文件路径 + /// + public static readonly string LIMIT_DATE_FILE_PATH = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\" + AssemblyFileProductName() + "\\aga_limit.dat"; + #endregion + + #region 记录日期的文件路径 + /// + /// 记录日期的文件路径 + /// + public static readonly string RECORD_DATE_FILE_PATH = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\" + AssemblyFileProductName() + "\\aga_record.dat"; + #endregion + + #region 获取当前程序版本号 + /// + /// 获取当前程序版本号 + /// + /// 版本号 + public static string AssemblyFileVersion() + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false); + if (attributes.Length == 0) + { + return string.Empty; + } + else + { + return ((AssemblyFileVersionAttribute)attributes[0]).Version; + } + } + #endregion + + #region 获取程序集产品名称 + /// + /// 获取程序集产品名称 + /// + /// 产品名称 + public static string AssemblyFileProductName() + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); + if (attributes.Length == 0) + { + return string.Empty; + } + else + { + return ((AssemblyProductAttribute)attributes[0]).Product; + } + } + #endregion + + #region 获取设备识别码 + /// + /// 获取设备识别码 + /// + /// + public static string GetDeviceCode(bool includeAssemblyFileProductName = true) + { + string cpuId = GetCPUID(); + string diskId = GetHardDiskID(); + if (includeAssemblyFileProductName) + { + return GetMd5Hash(AssemblyFileProductName() + string.Format("[{0}{1}{0}]", cpuId, diskId)).ToUpper(); + } + else + { + return GetMd5Hash(string.Format("[{0}{1}{0}]", cpuId, diskId)).ToUpper(); + } + } + #endregion + + #region 获取CPU ID + /// + /// 获取CPU ID + /// + /// + public static string GetCPUID() + { + ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT ProcessorId FROM Win32_Processor WHERE (ProcessorId IS NOT NULL)"); //SELECT * FROM Win32_Processor + string strCPUID = string.Empty; + ManagementObjectCollection managementObjectCollection = searcher.Get(); + foreach (ManagementObject mo in managementObjectCollection) + { + strCPUID = (string)mo["ProcessorId"]; + break; + } + return strCPUID; + } + #endregion + + #region 获取第一块磁盘编号 + /// + /// 获取第一块磁盘编号 + /// + /// + public static string GetHardDiskID() + { + try + { + ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia"); + string strHardDiskID = null; + foreach (ManagementObject mo in searcher.Get()) + { + strHardDiskID = mo["SerialNumber"].ToString().Trim(); + break; + } + return strHardDiskID; + } + catch + { + return string.Empty; + } + } + #endregion + + #region MD5 + /// + /// 取得输入字符串的MD5哈希值 + /// + /// 输入字符串 + /// MD5哈希值 + public static string GetMd5Hash(string argInput) + { + // Create a new instance of the MD5CryptoServiceProvider object. + MD5 md5Hasher = MD5.Create(); + + // Convert the input string to a byte array and compute the hash. + byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(argInput)); + + // Create a new Stringbuilder to collect the bytes + // and create a string. + StringBuilder sBuilder = new StringBuilder(); + + // Loop through each byte of the hashed data + // and format each one as a hexadecimal string. + for (int i = 0; i < data.Length; i++) + { + sBuilder.Append(data[i].ToString("x2")); + } + + // Return the hexadecimal string. + return sBuilder.ToString(); + } + + /// + /// 验证MD5哈希值 + /// + /// 输入字符串 + /// 哈希值 + /// 相同返回TRUE,不同返回FALSE + public static bool VerifyMd5Hash(string argInput, string argHash) + { + // Hash the input. + string hashOfInput = GetMd5Hash(argInput); + + // Create a StringComparer an comare the hashes. + StringComparer comparer = StringComparer.OrdinalIgnoreCase; + + if (0 == comparer.Compare(hashOfInput, argHash)) + { + return true; + } + else + { + return false; + } + } + #endregion + + #region 写入字符串数据到文件 + /// + /// 写入字符串数据到文件 + /// + /// 字符串 + /// 文件 + public static bool WirteStringData(string strData, string strPath) + { + bool result = false; + try + { + string strLog = string.Empty; + string saveFolder = Path.GetDirectoryName(strPath); + if (!Directory.Exists(saveFolder)) + { + Directory.CreateDirectory(saveFolder); + } + //DirectorySecurity secu = new DirectorySecurity(Path.GetDirectoryName(strPath), AccessControlSections.Access); + //FileSystemAccessRule fsar = new FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Allow); + //secu.SetAccessRule(fsar); + //Directory.SetAccessControl(saveFolder, secu); + using (StreamWriter sw = new StreamWriter(strPath, false)) + { + sw.WriteLine(strData); + } + result = true; + } + catch (Exception ex) + { + throw ex; + } + return result; + } + + /// + /// 写入字符串数据到文件 + /// + /// 字符串 + /// 文件 + /// 异常消息 + /// + public static bool WirteStringData(string strData, string strPath, ref string msg) + { + bool result = false; + try + { + WirteStringData(strData, strPath); + result = true; + } + catch (Exception ex) + { + msg = string.Format("{0}\r\n\r\n{1}", ex.uBIMMessage(), ex.uBIMMessage()); + } + return result; + } + #endregion + + #region 从文件读取字符串 + /// + /// 从文件读取字符串 + /// + /// 文件路径 + /// + public static string ReadStringData(string strPath) + { + string result = string.Empty; + try + { + using (StreamReader sr = new StreamReader(strPath)) + { + result = sr.ReadToEnd(); + } + } + catch + { + throw; + } + return result; + } + #endregion + + #region 对象转JSON + /// + /// 对象转JSON + /// + /// 类型约束 + /// 类型 + /// 返回JSON字符串 + public static string EntityToJsonString(T t) + { + return JsonConvert.SerializeObject(t); + } + + /// + /// 对象转JSON + /// + /// 类型约束 + /// 类型 + /// JsonSerializerSettings + /// 返回JSON字符串 + public static string EntityToJsonString(T t, JsonSerializerSettings settings) + { + return JsonConvert.SerializeObject(t, settings); + } + #endregion + + #region JSON转对象 + /// + /// JSON转对象 + /// + /// 类型约束 + /// JSON字符串 + /// 类型 + /// 返回指定类型 + public static T JsonStringToEntity(string strJson)// where T : class + { + try + { + return JsonConvert.DeserializeObject(strJson); + } + catch + { + throw; + } + } + + /// + /// JSON转对象 + /// + /// 类型约束 + /// JSON字符串 + /// 类型 + /// JsonSerializerSettings + /// 返回指定类型 + public static T JsonStringToEntity(string strJson, JsonSerializerSettings settings) + { + try + { + return JsonConvert.DeserializeObject(strJson, settings); + } + catch + { + throw; + } + } + + + public static dynamic JsonStringToEntity(string strJson, ExpandoObjectConverter expConverter) + { + try + { + return JsonConvert.DeserializeObject(strJson, expConverter); + } + catch + { + throw; + } + } + #endregion + + #region 将对象序列化 + /// + /// 将对象序列化 + /// + /// 文件(支持绝大多数数据类型) + /// 要序列化的对象(如哈希表,数组等等) + public static bool FileSerialize(string FilePath, object obj, ref string message) + { + bool result = false; + FileStream fs = null; + try + { + string saveFolder = Path.GetDirectoryName(FilePath); + if (!Directory.Exists(saveFolder)) + { + Directory.CreateDirectory(saveFolder); + } + //DirectorySecurity secu = new DirectorySecurity(saveFolder, AccessControlSections.Access); + //FileSystemAccessRule fsar = new FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Allow); + //secu.SetAccessRule(fsar); + //System.IO.Directory.SetAccessControl(saveFolder, secu); + fs = new FileStream(FilePath, FileMode.Create); + BinaryFormatter sl = new BinaryFormatter(); + //sl.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple; + sl.Binder = new Binder(); + sl.Serialize(fs, obj); + result = true; + } + catch (Exception ex) + { + message = string.Format("{0}\r\n\r\n{1}", ex.uBIMMessage(), ex.uBIMMessage()); + } + finally + { + if (fs != null) + { + fs.Close(); + fs.Dispose(); + } + } + return result; + } + #endregion + + #region 将文件反序列化 + /// + /// 将文件反序列化 + /// + /// 文件路径(必须是经过当前序列化后的文件) + /// 返回 null 表示序列反解失败或者目标文件不存在 + public static object FileDeSerialize(string FilePath, ref string message) + { + object result = null; + if (File.Exists(FilePath)) + { + FileStream fs = null; + try + { + string saveFolder = Path.GetDirectoryName(FilePath); + if (!Directory.Exists(saveFolder)) + { + Directory.CreateDirectory(saveFolder); + } + //DirectorySecurity secu = new DirectorySecurity(saveFolder, AccessControlSections.Access); + //FileSystemAccessRule fsar = new FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Allow); + //secu.SetAccessRule(fsar); + //System.IO.Directory.SetAccessControl(saveFolder, secu); + + fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read); + + BinaryFormatter sl = new BinaryFormatter(); + //sl.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple; + sl.Binder = new Binder(); + result = sl.Deserialize(fs); + } + catch (Exception ex) + { + result = null; + message = string.Format("{0}\r\n\r\n{1}", ex.uBIMMessage(), ex.uBIMMessage()); + } + finally + { + if (fs != null) + { + fs.Close(); + } + } + } + return result; + } + #endregion + + #region 反序列化Byte数组 + /// + /// 反序列化Byte数组 + /// + /// + /// + public static object DeSerializeByByteArray(byte[] resource) + { + try + { + using (MemoryStream sm = new MemoryStream(resource)) + { + BinaryFormatter sl = new BinaryFormatter(); + object obg = sl.Deserialize(sm); + sm.Close(); + return obg; + } + } + catch + { + return null; + } + } + #endregion + + public class Binder : SerializationBinder + { + public override Type BindToType(string assemblyName, string typeName) + { + Assembly ass = Assembly.GetExecutingAssembly(); + return ass.GetType(typeName); + } + } + + #region CAD颜色集合 + /// + /// CAD颜色集合 + /// + public static Color[] CadColors = + { + Color.FromRgb(255,0,0), + Color.FromRgb(255,255,0), + Color.FromRgb(0,255,0), + Color.FromRgb(0,255,255), + Color.FromRgb(0,0,255), + Color.FromRgb(255,0,255), + Color.FromRgb(255,255,255), + Color.FromRgb(128,128,128), + Color.FromRgb(192,192,192), + Color.FromRgb(255,0,0), + Color.FromRgb(255,127,127), + Color.FromRgb(204,0,0), + Color.FromRgb(204,102,102), + Color.FromRgb(153,0,0), + Color.FromRgb(153,76,76), + Color.FromRgb(127,0,0), + Color.FromRgb(127,63,63), + Color.FromRgb(76,0,0), + Color.FromRgb(76,38,38), + Color.FromRgb(255,63,0), + Color.FromRgb(255,159,127), + Color.FromRgb(204,51,0), + Color.FromRgb(204,127,102), + Color.FromRgb(153,38,0), + Color.FromRgb(153,95,76), + Color.FromRgb(127,31,0), + Color.FromRgb(127,79,63), + Color.FromRgb(76,19,0), + Color.FromRgb(76,47,38), + Color.FromRgb(255,127,0), + Color.FromRgb(255,191,127), + Color.FromRgb(204,102,0), + Color.FromRgb(204,153,102), + Color.FromRgb(153,76,0), + Color.FromRgb(153,114,76), + Color.FromRgb(127,63,0), + Color.FromRgb(127,95,63), + Color.FromRgb(76,38,0), + Color.FromRgb(76,57,38), + Color.FromRgb(255,191,0), + Color.FromRgb(255,223,127), + Color.FromRgb(204,153,0), + Color.FromRgb(204,178,102), + Color.FromRgb(153,114,0), + Color.FromRgb(153,133,76), + Color.FromRgb(127,95,0), + Color.FromRgb(127,111,63), + Color.FromRgb(76,57,0), + Color.FromRgb(76,66,38), + Color.FromRgb(255,255,0), + Color.FromRgb(255,255,127), + Color.FromRgb(204,204,0), + Color.FromRgb(204,204,102), + Color.FromRgb(153,153,0), + Color.FromRgb(153,153,76), + Color.FromRgb(127,127,0), + Color.FromRgb(127,127,63), + Color.FromRgb(76,76,0), + Color.FromRgb(76,76,38), + Color.FromRgb(191,255,0), + Color.FromRgb(223,255,127), + Color.FromRgb(153,204,0), + Color.FromRgb(178,204,102), + Color.FromRgb(114,153,0), + Color.FromRgb(133,153,76), + Color.FromRgb(95,127,0), + Color.FromRgb(111,127,63), + Color.FromRgb(57,76,0), + Color.FromRgb(66,76,38), + Color.FromRgb(127,255,0), + Color.FromRgb(191,255,127), + Color.FromRgb(102,204,0), + Color.FromRgb(153,204,102), + Color.FromRgb(76,153,0), + Color.FromRgb(114,153,76), + Color.FromRgb(63,127,0), + Color.FromRgb(95,127,63), + Color.FromRgb(38,76,0), + Color.FromRgb(57,76,38), + Color.FromRgb(63,255,0), + Color.FromRgb(159,255,127), + Color.FromRgb(51,204,0), + Color.FromRgb(127,204,102), + Color.FromRgb(38,153,0), + Color.FromRgb(95,153,76), + Color.FromRgb(31,127,0), + Color.FromRgb(79,127,63), + Color.FromRgb(19,76,0), + Color.FromRgb(47,76,38), + Color.FromRgb(0,255,0), + Color.FromRgb(127,255,127), + Color.FromRgb(0,204,0), + Color.FromRgb(102,204,102), + Color.FromRgb(0,153,0), + Color.FromRgb(76,153,76), + Color.FromRgb(0,127,0), + Color.FromRgb(63,127,63), + Color.FromRgb(0,76,0), + Color.FromRgb(38,76,38), + Color.FromRgb(0,255,63), + Color.FromRgb(127,255,159), + Color.FromRgb(0,204,51), + Color.FromRgb(102,204,127), + Color.FromRgb(0,153,38), + Color.FromRgb(76,153,95), + Color.FromRgb(0,127,31), + Color.FromRgb(63,127,79), + Color.FromRgb(0,76,19), + Color.FromRgb(38,76,47), + Color.FromRgb(0,255,127), + Color.FromRgb(127,255,191), + Color.FromRgb(0,204,102), + Color.FromRgb(102,204,153), + Color.FromRgb(0,153,76), + Color.FromRgb(76,153,114), + Color.FromRgb(0,127,63), + Color.FromRgb(63,127,95), + Color.FromRgb(0,76,38), + Color.FromRgb(38,76,57), + Color.FromRgb(0,255,191), + Color.FromRgb(127,255,223), + Color.FromRgb(0,204,153), + Color.FromRgb(102,204,178), + Color.FromRgb(0,153,114), + Color.FromRgb(76,153,133), + Color.FromRgb(0,127,95), + Color.FromRgb(63,127,111), + Color.FromRgb(0,76,57), + Color.FromRgb(38,76,66), + Color.FromRgb(0,255,255), + Color.FromRgb(127,255,255), + Color.FromRgb(0,204,204), + Color.FromRgb(102,204,204), + Color.FromRgb(0,153,153), + Color.FromRgb(76,153,153), + Color.FromRgb(0,127,127), + Color.FromRgb(63,127,127), + Color.FromRgb(0,76,76), + Color.FromRgb(38,76,76), + Color.FromRgb(0,191,255), + Color.FromRgb(127,223,255), + Color.FromRgb(0,153,204), + Color.FromRgb(102,178,204), + Color.FromRgb(0,114,153), + Color.FromRgb(76,133,153), + Color.FromRgb(0,95,127), + Color.FromRgb(63,111,127), + Color.FromRgb(0,57,76), + Color.FromRgb(38,66,76), + Color.FromRgb(0,127,255), + Color.FromRgb(127,191,255), + Color.FromRgb(0,102,204), + Color.FromRgb(102,153,204), + Color.FromRgb(0,76,153), + Color.FromRgb(76,114,153), + Color.FromRgb(0,63,127), + Color.FromRgb(63,95,127), + Color.FromRgb(0,38,76), + Color.FromRgb(38,57,76), + Color.FromRgb(0,63,255), + Color.FromRgb(127,159,255), + Color.FromRgb(0,51,204), + Color.FromRgb(102,127,204), + Color.FromRgb(0,38,153), + Color.FromRgb(76,95,153), + Color.FromRgb(0,31,127), + Color.FromRgb(63,79,127), + Color.FromRgb(0,19,76), + Color.FromRgb(38,47,76), + Color.FromRgb(0,0,255), + Color.FromRgb(127,127,255), + Color.FromRgb(0,0,204), + Color.FromRgb(102,102,204), + Color.FromRgb(0,0,153), + Color.FromRgb(76,76,153), + Color.FromRgb(0,0,127), + Color.FromRgb(63,63,127), + Color.FromRgb(0,0,76), + Color.FromRgb(38,38,76), + Color.FromRgb(63,0,255), + Color.FromRgb(159,127,255), + Color.FromRgb(51,0,204), + Color.FromRgb(127,102,204), + Color.FromRgb(38,0,153), + Color.FromRgb(95,76,153), + Color.FromRgb(31,0,127), + Color.FromRgb(79,63,127), + Color.FromRgb(19,0,76), + Color.FromRgb(47,38,76), + Color.FromRgb(127,0,255), + Color.FromRgb(191,127,255), + Color.FromRgb(102,0,204), + Color.FromRgb(153,102,204), + Color.FromRgb(76,0,153), + Color.FromRgb(114,76,153), + Color.FromRgb(63,0,127), + Color.FromRgb(95,63,127), + Color.FromRgb(38,0,76), + Color.FromRgb(57,38,76), + Color.FromRgb(191,0,255), + Color.FromRgb(223,127,255), + Color.FromRgb(153,0,204), + Color.FromRgb(178,102,204), + Color.FromRgb(114,0,153), + Color.FromRgb(133,76,153), + Color.FromRgb(95,0,127), + Color.FromRgb(111,63,127), + Color.FromRgb(57,0,76), + Color.FromRgb(66,38,76), + Color.FromRgb(255,0,255), + Color.FromRgb(255,127,255), + Color.FromRgb(204,0,204), + Color.FromRgb(204,102,204), + Color.FromRgb(153,0,153), + Color.FromRgb(153,76,153), + Color.FromRgb(127,0,127), + Color.FromRgb(127,63,127), + Color.FromRgb(76,0,76), + Color.FromRgb(76,38,76), + Color.FromRgb(255,0,191), + Color.FromRgb(255,127,223), + Color.FromRgb(204,0,153), + Color.FromRgb(204,102,178), + Color.FromRgb(153,0,114), + Color.FromRgb(153,76,133), + Color.FromRgb(127,0,95), + Color.FromRgb(127,63,111), + Color.FromRgb(76,0,57), + Color.FromRgb(76,38,66), + Color.FromRgb(255,0,127), + Color.FromRgb(255,127,191), + Color.FromRgb(204,0,102), + Color.FromRgb(204,102,153), + Color.FromRgb(153,0,76), + Color.FromRgb(153,76,114), + Color.FromRgb(127,0,63), + Color.FromRgb(127,63,95), + Color.FromRgb(76,0,38), + Color.FromRgb(76,38,57), + Color.FromRgb(255,0,63), + Color.FromRgb(255,127,159), + Color.FromRgb(204,0,51), + Color.FromRgb(204,102,127), + Color.FromRgb(153,0,38), + Color.FromRgb(153,76,95), + Color.FromRgb(127,0,31), + Color.FromRgb(127,63,79), + Color.FromRgb(76,0,19), + Color.FromRgb(76,38,47), + Color.FromRgb(51,51,51), + Color.FromRgb(91,91,91), + Color.FromRgb(132,132,132), + Color.FromRgb(173,173,173), + Color.FromRgb(214,214,214), + Color.FromRgb(255,255,255) + }; + #endregion + + #region 获取更新路径 + /// + /// 获取更新路径 + /// + /// + /// + public static string GetUpdatePath(string settingsPath) + { + string strUpdatePath = string.Empty; + try + { + XmlDocument xdoc = new XmlDocument(); + xdoc.LoadXml(File.ReadAllText(settingsPath)); + strUpdatePath = xdoc.DocumentElement["Url"].InnerText; + } + catch (Exception ex) + { + strUpdatePath = ex.uBIMMessage(); + } + return strUpdatePath; + } + #endregion + + #region 获取网络时间 + /// + /// 获取网络时间 + /// + /// + public static DateTime? GetNetTime() + { + DateTime? dateTime = null; + try + { + Dictionary HeaderList = GetHTTPResponseHeaders("http://www.baidu.com/"); //http://www.ntsc.ac.cn/ + + dateTime = DateTime.Parse(HeaderList["Date"]); + } + catch + { + //忽略 + } + return dateTime; + } + + public static Dictionary GetHTTPResponseHeaders(string Url) + { + Dictionary HeaderList = new Dictionary(); + WebRequest WebRequestObject = WebRequest.Create(Url); + //5秒超时 + WebRequestObject.Timeout = 5000; + WebResponse ResponseObject = WebRequestObject.GetResponse(); + foreach (string HeaderKey in ResponseObject.Headers) + { + HeaderList.Add(HeaderKey, ResponseObject.Headers[HeaderKey]); + } + ResponseObject.Close(); + return HeaderList; + } + + public static bool GMTStrParse(string gmtStr, out DateTime gmtTime) + { + CultureInfo enUS = new CultureInfo("en-US"); + bool s = DateTime.TryParseExact(gmtStr, "r", enUS, DateTimeStyles.None, out gmtTime); + return s; + } + #endregion + + #region 运行exe + [DllImport("shell32.dll")] + public static extern int ShellExecute(IntPtr hwnd, StringBuilder lpszOp, StringBuilder lpszFile, StringBuilder lpszParams, StringBuilder lpszDir, int FsShowCmd); + + /// + /// 运行exe + /// + /// exe路径 + public static void RunExe(string exePath) + { + string exeFileName = Path.GetFileName(exePath); + string dirPath = Directory.GetParent(exePath).FullName; + ShellExecute(IntPtr.Zero, new StringBuilder("Open"), new StringBuilder(exeFileName), new StringBuilder(""), new StringBuilder(dirPath), 1); + } + #endregion + + #region 安装字体到AutoCad + /// + /// 安装字体到AutoCad + /// + public static void InstallFonts() + { + try + { + //字体文件路径 + string strInstallPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\Autodesk\ApplicationPlugins\uBIM_ReCAD.bundle\Contents\Libs"; + //获取SHX文件路径 + List lstFontFilePath = GetSHXFiles(strInstallPath); + + #region CAD版本对应R版本参数 + Dictionary dicCadVersion = new Dictionary + { + { "AutoCAD 2002", "R15.0" }, + { "AutoCAD 2004", "R16.0" }, + { "AutoCAD 2005", "R16.1" }, + { "AutoCAD 2006", "R16.2" }, + { "AutoCAD 2007", "R17.0" }, + { "AutoCAD 2008", "R17.1" }, + { "AutoCAD 2009", "R17.2" }, + { "AutoCAD 2010", "R18.0" }, + { "AutoCAD 2011", "R18.1" }, + { "AutoCAD 2012", "R18.2" }, + { "AutoCAD 2013", "R19.0" }, + { "AutoCAD 2014", "R19.1" }, + { "AutoCAD 2015", "R20.0" }, + { "AutoCAD 2016", "R20.1" }, + { "AutoCAD 2017", "R21.0" }, + { "AutoCAD 2018", "R22.0" }, + { "AutoCAD 2019", "R23.0" }, + { "AutoCAD 2020", "R24.0" }, + { "AutoCAD 2021", "R25.0" }, + { "AutoCAD 2022", "R26.0" }, + { "AutoCAD 2023", "R27.0" }, + { "AutoCAD 2024", "R28.0" }, + { "AutoCAD 2025", "R29.0" }, + }; + #endregion + + foreach (var key in dicCadVersion.Keys) + { + //中文版本 + string chsFontFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), string.Format(@"Autodesk\{0}\{1}\chs\Support", key, dicCadVersion[key])); + if (Directory.Exists(chsFontFolder)) + { + foreach (var fontFilePath in lstFontFilePath) + { + string strFontName = Path.GetFileName(fontFilePath); + string targetFontPath = Path.Combine(chsFontFolder, strFontName); + if (!File.Exists(targetFontPath)) + { + File.Copy(fontFilePath, targetFontPath, true); + } + } + } + + //英文版本 + string enFontFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), string.Format(@"Autodesk\{0}\{1}\en\Support", key, dicCadVersion[key])); + if (Directory.Exists(enFontFolder)) + { + foreach (var fontFilePath in lstFontFilePath) + { + string strFontName = Path.GetFileName(fontFilePath); + string targetFontPath = Path.Combine(enFontFolder, strFontName); + if (!File.Exists(targetFontPath)) + { + File.Copy(fontFilePath, targetFontPath, true); + } + } + } + } + } + catch + { + throw; + } + } + #endregion + + #region 获取文件夹下所有的SHX字体文件路径 + /// + /// 获取文件夹下所有的SHX字体文件路径 + /// + /// 目标文件夹 + /// + private static List GetSHXFiles(string targetDir) + { + List result = new List(); + string[] filePaths = Directory.GetFiles(targetDir); + foreach (var file in filePaths) + { + if (file.ToLower().EndsWith(".shx")) + { + result.Add(file); + } + } + return result; + } + #endregion + } + public static class ExceptionEx + { + /// + /// 异常信息处理 + /// + /// 异常 + /// + public static string uBIMMessage(this Exception exception) + { + return exception.Message.Replace("WW.CAD", "uBIM.CAD"); + } + + /// + /// 异常信息处理 + /// + /// 异常 + /// + public static string uBIMStackTrace(this Exception exception) + { + return exception.uBIMStackTrace().Replace("WW.CAD", "uBIM.CAD"); + } + } +} diff --git a/src/uBIM.Checker.AOP/LicenseChecker.cs b/src/uBIM.Checker.AOP/LicenseChecker.cs index 3a4495b..23d0f7c 100644 --- a/src/uBIM.Checker.AOP/LicenseChecker.cs +++ b/src/uBIM.Checker.AOP/LicenseChecker.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Reflection; using System.Windows; namespace uBIM.Checker.AOP @@ -25,6 +26,8 @@ namespace uBIM.Checker.AOP { RunChecker(); } + + /// /// 启动检查器 /// @@ -32,6 +35,7 @@ namespace uBIM.Checker.AOP { Checker = new uBIM.PersonLicense.Checker(Assembly.GetExecutingAssembly()); Checker.Run(); + CheckLicenseState("", false); } /// /// 检查许可状态(是否有效) @@ -41,6 +45,7 @@ namespace uBIM.Checker.AOP public bool CheckLicenseState(string title = "uBIM", bool showMsg = true) { bool result = !Checker.OutLimit; + Trace.TraceInformation(result.ToString()); if (showMsg) { string msg; diff --git a/src/uBIM.Checker.AOP/uBIM.Checker.AOP.csproj b/src/uBIM.Checker.AOP/uBIM.Checker.AOP.csproj index 29a980b..c96c066 100644 --- a/src/uBIM.Checker.AOP/uBIM.Checker.AOP.csproj +++ b/src/uBIM.Checker.AOP/uBIM.Checker.AOP.csproj @@ -1,19 +1,24 @@  - - net462 - False - 0.0.5 - + + net462 + False + 0.0.11 + true + - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + +