|
@@ -1,6 +1,8 @@
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
+using System.Security.Principal;
|
|
|
+using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Windows.Forms;
|
|
|
|
|
@@ -14,9 +16,74 @@ namespace UAS_CheckWork
|
|
|
[STAThread]
|
|
|
static void Main()
|
|
|
{
|
|
|
- Application.EnableVisualStyles();
|
|
|
- Application.SetCompatibleTextRenderingDefault(false);
|
|
|
- Application.Run(new Form1());
|
|
|
+ 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);
|
|
|
+ if (principal.IsInRole(WindowsBuiltInRole.Administrator))
|
|
|
+ Application.Run(new Form2());
|
|
|
+ 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());
|
|
|
+ MessageBox.Show(str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
|
|
+ }
|
|
|
+
|
|
|
+ //未处理的异常统一通过这里返回
|
|
|
+ static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
|
|
+ {
|
|
|
+ string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());
|
|
|
+ MessageBox.Show(str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 生成自定义异常消息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="ex">异常对象</param>
|
|
|
+ /// <param name="backStr">备用异常消息:当ex为null时有效</param>
|
|
|
+ /// <returns>异常字符串文本</returns>
|
|
|
+ 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();
|
|
|
}
|
|
|
}
|
|
|
}
|