///



/// 创建桌面图标

///

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;

    }
private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
//可以记录日志并转向错误bug窗口友好提示用户
e.Handled = true;
try
{
PLogs.Error(e.Exception.TargetSite.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.TargetSite.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();
}
}

wpf 全局异常捕捉+错误日志记录+自动创建桌面图标的更多相关文章

  1. wpf 全局异常捕捉+简单日志记录

    `namespace MyApp { /// /// App.xaml 的交互逻辑 /// public partial class App : Application { public App() ...

  2. .NET Core通过过滤器和中间件两种方式实现全局异常捕获和日志记录

    1.一共有五类过滤器IAsyncAuthorizationFilter  IAsyncResourceFilter   IAsyncActonFilter  IAsyncExceptionFilter ...

  3. 将错误日志记录在txt文本里

    引言 对于已经部署的系统一旦出错对于我们开发人员来说是比较痛苦的事情,因为我们不能跟踪到错误信息,不能 很快的定位到我们的错误位置在哪,这时候如果能像开发环境一样记录一些堆栈信息就可以了,这时候我们就 ...

  4. android中全局异常捕捉

    android中全局异常捕捉 只要写代码就会有bug,但是我们要想办法收集到客户的bug.有第三方bugly或者友盟等可以收集.但是,android原生就提供了有关收集异常的api,所以我们来学习一下 ...

  5. PHP错误日志记录:display_errors与log_errors的区别

    我们所做的东西,无论在开发环境还是在生产环境都可能会出现一些问题. 开发环境下,我们会要求错误尽可能详细的呈现出来,错误提示信息越详细越好,越详细越能帮助开发人员确定问题所在并从根本上解决他们. 生产 ...

  6. Spring 全局异常捕捉

    Spring全局异常捕捉类 注解@ControllerAdvice package com.sicdt.sicsign.web.bill.controller; import org.springfr ...

  7. springboot(四)拦截器和全局异常捕捉

    github代码:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service 全部 ...

  8. 在Spring Boot中添加全局异常捕捉提示

    在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 全局异常捕捉: 新建一个类GlobalDefaultExceptionHandler, 在class注解上@Controll ...

  9. PHP 捕捉错误,记录到日志

    register_shutdown_function("shutdown"); define('ERR_LOG_FILE', '/dev/shm/php_log.txt'); if ...

随机推荐

  1. Spring Boot+Spring Security+JWT 实现 RESTful Api 认证(二)

    Spring Boot+Spring Security+JWT 实现 RESTful Api 认证(二) 摘要 上一篇https://javaymw.com/post/59我们已经实现了基本的登录和t ...

  2. 5-kunernetes资源调度

    1.创建一个pod的工作流程 master节点组件 1.apiserver --> etcd 2.scheduler 3.controller-manager node节点有那些组件 1.kub ...

  3. NOI 2012 【迷失游乐园】

    这道题,额,反正我是刚了2天,然后就萎了......(是不是觉得我很菜) 题目描述: 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩. 进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐 ...

  4. NOIP提高组2013 D2T3 【华容道】

    某王  老师给我们考了一场noip2013的真题...心态爆炸! 题目大意: 有一个n*m的棋盘,每个格子上都有一个棋子,有些格子上的棋子能够移动(可移动的棋子是固定的),棋盘中有一个格子是空的,仍何 ...

  5. devops构建IT服务供应链

    1. devops构建IT服务供应链   1) 什么是devops devops是 "开发" 和"运维"的缩写 devops是一组最佳实践强调(IT研发.运维. ...

  6. MeteoInfoLab脚本示例:TOMS HDF数据

    TOMS (Total Ozone Mapping Spectrometer)数据是全球臭氧观测.脚本程序: #Add data file folder = 'D:/Temp/hdf/' fns = ...

  7. unix socket接口

    socket 创建套接字文件: #include <sys/socket.h> // 成功返回非负套接字描述符,失败返回-1 int socket(int domain, int type ...

  8. Python自动化准备工作(pycharm安装)

    一.安装Python 1.下载python-3.7.0-amd64.exe后双击 2.勾选Add Python3.7 to PATH可不用配置环境变量 3.点击下一步,可以按默认路径,也可以自己选择路 ...

  9. abp(net core)+easyui+efcore实现仓储管理系统——出库管理之三(五十一)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...

  10. springboot打成jar包和war包的两种方式,并引入第三方jar包!

    springboot打成jar包和war包的两种方式,并引入第三方jar包! 首先把需要引入的第三方jar包引入到本地项目中,在引用的模块下加一个lib文件夹 一.打成jar包 1.修改pom文件里的 ...