using System; using System.IO; using System.Security.Principal; using System.Text; using System.Windows.Forms; using System.Xml; using UAS_MES_NEW.Entity; using UAS_MES_NEW.PublicMethod; namespace UAS_MES_NEW { static class Program { /// /// 应用程序的主入口点 /// [STAThread] static void Main() { try { WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(identity); //设置应用程序处理异常方式:ThreadException处理 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); //处理UI线程异常 Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); //处理非UI线程异常 AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); #region 应用程序的主入口点 Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //处理全局事件 GlobalEventsHandler g = new GlobalEventsHandler(); //添加全局事件的监听 Application.AddMessageFilter(g); //启用异常记录日志的操作 string sysdisc = Environment.GetEnvironmentVariable("windir").Substring(0, 1); //创建标签缓存的文件夹 if (!Directory.Exists(ftpOperater.DownLoadTo)) Directory.CreateDirectory(ftpOperater.DownLoadTo); if (!Directory.Exists(SystemInf.LogFolder)) Directory.CreateDirectory(SystemInf.LogFolder); FileStream fs = new FileStream(SystemInf.LogFolder + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.OpenOrCreate, FileAccess.ReadWrite); fs.Close(); //创建存储登录信息的文件 if (!Directory.Exists(SystemInf.CacheFolder)) Directory.CreateDirectory(SystemInf.CacheFolder); FileStream fcaches = new FileStream(SystemInf.CacheFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite); fcaches.Close(); DevExpress.UserSkins.BonusSkins.Register(); DevExpress.Skins.SkinManager.EnableFormSkins(); DevExpress.Skins.SkinManager.EnableMdiFormSkins(); //判断是否xml文件大小为0 FileInfo info = new FileInfo(SystemInf.CacheFilePath); if (info.Length == 0) { XmlDocument doc = new XmlDocument(); //创建类型声明节点 XmlNode node = doc.CreateXmlDeclaration("1.0", "utf-8", ""); doc.AppendChild(node); //创建根节点 XmlElement xeRoot = doc.CreateElement("cacheInfo"); doc.AppendChild(xeRoot); doc.Save(SystemInf.CacheFilePath); } //创建记录打印进程的文件 FileStream fas = new FileStream(SystemInf.CacheFolder + "lblprocess.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite); fas.Close(); if (principal.IsInRole(WindowsBuiltInRole.Administrator)) Application.Run(new Login()); else { //创建启动对象 System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); // 设置运行文件 startInfo.FileName = Application.ExecutablePath; //设置启动动作,确保以管理员身份运行 startInfo.Verb = "runas"; //如果不是管理员,则启动UAC System.Diagnostics.Process.Start(startInfo); } #endregion } catch (Exception ex) { string str = GetExceptionMsg(ex, string.Empty); MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } //处理线程的异常 static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { string str = GetExceptionMsg(e.Exception, e.ToString()); LogManager.DoLog(e.Exception.Message + " " + e.Exception.TargetSite + " " + e.Exception.StackTrace); MessageBox.Show(str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop); } //未处理的异常统一通过这里返回 static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString()); LogManager.DoLog(str); MessageBox.Show(str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop); } /// /// 生成自定义异常消息 /// /// 异常对象 /// 备用异常消息:当ex为null时有效 /// 异常字符串文本 static string GetExceptionMsg(Exception ex, string backStr) { StringBuilder sb = new StringBuilder(); if (ex != null) { sb.AppendLine(ex.Message); sb.AppendLine("【异常方法】:" + ex.StackTrace); } //else { sb.AppendLine("【未处理异常】:" + backStr); } return sb.ToString(); } } }