Example #1
0
 /// <summary>
 /// 检测是否已有一个程序实例运行
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 void App_Startup(object sender, StartupEventArgs e)
 {
     try
     {
         bool ret;
         _mutex = new System.Threading.Mutex(true, SystemCommon.FileName, out ret);
         // _mutex.ReleaseMutex();
         if (!ret)
         {
             //MessageBox.Show("已有一个程序实例运行");
             Environment.Exit(0);
             // SystemCommon.ExitSystem();
             //Application.Current.Shutdown();
         }
     }
     catch (Exception exception)
     {
         ToolLogs.Debug(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "检测是否已有一个程序实例运行", exception);
     }
 }
Example #2
0
        /// <summary>
        /// 导入缓存文件
        /// </summary>
        private bool ImputCacheFile()
        {
            // 摘要: 返回包含当前进程的命令行参数的字符串数组。
            // 返回结果:  字符串数组,其中的每个元素都包含一个命令行参数。第一个元素是可执行文件名,后面的零个或多个元素包含其余的命令行参数。
            string[] strs = Environment.GetCommandLineArgs();

            int result = 0;

            if (strs.Length <= 1)
            {
                return(false);
            }

            for (int i = 1; i < strs.Length; i++)
            {
                FileInfo fileInfo = new FileInfo(strs[i]);
                string   newPaht  = RichTextBoxTool.PathCache + fileInfo.Name;
                if (File.Exists(newPaht))
                {
                    ToolLogs.Debug(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "导入失败,文件已经存在" + strs[i]);
                    result++;
                }
                else
                {
                    fileInfo.MoveTo(newPaht);
                    ToolLogs.Debug(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "导入成功!" + strs[i]);
                    //fileInfo.Delete();
                }
            }
            //if (result > 0)
            //{
            //    MessageBox.Show("有" + result + "个缓存文件导入失败,因为这此文件已经在系统中存在", "导入结果", MessageBoxButton.OK, MessageBoxImage.Warning);
            //}

            return(true);
        }
Example #3
0
        public App()
        {
            #region  序退出异常处理

            var pro = Process.GetCurrentProcess();
            pro.EnableRaisingEvents = true;

            pro.Exited += (sender, e1) =>
            {
                ToolLogs.Error(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "在进程退出时发生");
            };

            AppDomain.CurrentDomain.ProcessExit += (sender, e1) =>
            {
                ////晚于this.Exit
                //System.Threading.Monitor.TryEnter(obj, 500);
                ////后来改为
                //System.Threading.Monitor.Enter(obj);

                ToolLogs.Error(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "当默认应用程序域的父进程存在时发生");

                ////不能在这保存所有便签设置,因为这时所有的程序已经全部关闭。
                //NotepadManage.SaveSetings();
            };

            //异常处理
            this.DispatcherUnhandledException += (sender, e1) =>
            {
                ToolLogs.Debug(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "系统异常处理", e1.Exception);

                e1.Handled = true;//使用这一行代码告诉运行时,该异常被处理了,不再作为UnhandledException抛出了。
                SystemCommon.IsExitSystem = true;

                MessageBox.Show("我们很抱歉,当前应用程序遇到一些问题,该操作已经终止,将要重新启动。" + e1.Exception.Message, "错误", MessageBoxButton.OK, MessageBoxImage.Error);//这里通常需要给用户一些较为友好的提示,并且后续可能的操作


                //保存所有便签设置
                NotepadManage.SaveSetings();

                //不要在这打开程序,如果你的程序是刚打开时出现错误,用户将无法关闭。这将是用户的恶梦。
                SystemCommon.ExitSystem();
                //System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location);
            };

            this.Exit += (sender, e1) =>
            {
                //早于AppDomain.CurrentDomain.ProcessExit
                ToolLogs.Error(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "在进程退出时发生Exit");
                ////不能在这保存所有便签设置,因为这时所有的程序已经全部关闭。
                // NotepadManage.SaveSetings();
                //e1.ApplicationExitCode
            };

            #endregion

            bool result = ImputCacheFile();

            //非调试模式
            if (!System.Diagnostics.Debugger.IsAttached)
            {
                Client.Pub.ServiceProxyFactoryLib.ProxyBinding.ReplaceAddress = true;
                Client.Pub.ServiceProxyFactoryLib.ProxyBinding.ReplacePort    = true;

                //检测是否已有一个程序实例运行
                this.Startup += new StartupEventHandler(App_Startup);


                //下载版本不同的文件
                string loadPath = Path.Combine(SystemCommon.Path, "AutoUpdate");

                //复制自动更新程序文件
                Tools.FileManage.CopyDir(Path.Combine(loadPath, "LoadDown\\AutoUpdate\\"), loadPath);

                Tools.FileManage.IsUpdateThread();

                //绑定扩展名
                Task task = new Task(() =>
                {
                    try
                    {
                        BindingExtend();
                    }
                    catch (Exception e)
                    {
                        ToolLogs.Error(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "绑定扩展名", e);
                    }
                });
                task.Start();
            }
        }