wpf 全局異常捕捉+錯誤日誌記錄+自動建立桌面圖標

/// shell


/// 建立桌面圖標
///

public static void CreateShortcutOnDesktop(string LnkName)
{

String shortcutPath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), LnkName + ".lnk");
        if (!System.IO.File.Exists(shortcutPath))
        {
            string AppName = System.IO.Path.GetFileName(System.Reflection.Assembly.GetEntryAssembly().GetName().Name);
            // 獲取當前應用程序目錄地址
            String exePath = AppDomain.CurrentDomain.BaseDirectory + AppName + ".exe";
            IW.IWshShell shell = new IW.WshShell();
            // 肯定是否已經建立的快捷鍵被更名了
            foreach (var item in Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "*.lnk"))
            {
                IW.WshShortcut tempShortcut = (IW.WshShortcut)shell.CreateShortcut(item);
                if (tempShortcut.TargetPath == exePath)
                {
                    return;
                }
            }
            IW.WshShortcut shortcut = (IW.WshShortcut)shell.CreateShortcut(shortcutPath);
            shortcut.TargetPath = exePath;
            shortcut.Arguments = "";// 參數  
            shortcut.Description = AppName + exePath;
            shortcut.WorkingDirectory = Environment.CurrentDirectory;//程序所在文件夾,在快捷方式圖標點擊右鍵能夠看到此屬性  
            shortcut.IconLocation = exePath;//圖標,該圖標是應用程序的資源文件  
            //shortcut.Hotkey = "CTRL+SHIFT+W";//熱鍵,發現沒做用,大概須要註冊一下  
            shortcut.WindowStyle = 1;
            shortcut.Save();
            MessageBox.Show("桌面快捷方式已建立!");
        }
    }

----分界線----
public partial class App : Application
{
public App()
{
//UI線程異常
this.DispatcherUnhandledException += App_DispatcherUnhandledException;
//非UI線程異常
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;this

}
    private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
    {
        //能夠記錄日誌並轉向錯誤bug窗口友好提示用戶
        e.Handled = true;
        try
        {
            PLogs.Error(e.Exception.StackTrace.ToString(), e.Exception.Message);
           
        }
        catch (Exception)
        {


        }
    MessageBox.Show("抱歉給您帶來不便!消息:" + e.Exception.Message, "系統錯誤",MessageBoxButton.OK,MessageBoxImage.Error);

    }
    private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        //能夠記錄日誌並轉向錯誤bug窗口友好提示用戶
        if (e.ExceptionObject is System.Exception)
        {

            Exception ex = (System.Exception)e.ExceptionObject;
            try
            {
                PLogs.Error(ex.StackTrace.ToString(), ex.Message);
           
            }
            catch (Exception)
            {


            }
            MessageBox.Show("抱歉給您帶來不便!消息:" + ex.Message, "系統錯誤", MessageBoxButton.OK, MessageBoxImage.Error);
      
        }
    }
}

class PLogs
{
    /// <summary>
    /// 普通日誌
    /// </summary>
    /// <param name="className">類名</param>
    /// <param name="info">日誌記錄</param>
    public static void Info(string className, string info)
    {
        WriteLog("INFO", className, info);
    }

    /// <summary>
    /// 警告日誌
    /// </summary>
    /// <param name="className">類名</param>
    /// <param name="info">日誌記錄</param>
    public static void Warn(string className, string info)
    {
        WriteLog("WARN", className, info);
    }

    /// <summary>
    /// 錯誤日誌
    /// </summary>
    /// <param name="className">類名</param>
    /// <param name="info">日誌記錄</param>
    public static void Error(string className, string info)
    {
        WriteLog("ERROE", className, info);
    }

    /// <summary>
    /// 寫入日誌
    /// </summary>
    /// <param name="className">類名</param>
    /// <param name="infoLevel">日誌級別</param>
    /// <param name="info">日誌記錄</param>
    private static void WriteLog(string className, string infoLevel, string info)
    {
        string logFilePath = AppDomain.CurrentDomain.BaseDirectory + "/logs";
        if (!Directory.Exists(logFilePath))
        {
            Directory.CreateDirectory(logFilePath);
        }
        string logFileName = logFilePath + "/" + "log_" + DateTime.Now.ToString("yyyyMMdd") + ".log";
        if (!File.Exists(logFileName))
        {
            File.Create(logFileName).Close();
        }
        string logFormat = string.Format("[ {0} ] {1}  {2}  {3}",
                                       DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                                       className, infoLevel, info);
        StreamWriter sw = File.AppendText(logFileName);
        sw.WriteLine(logFormat);
        sw.Flush();
        sw.Close();
    }
}
相關文章
相關標籤/搜索