using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.IO; using System.Linq; using System.Windows; using System.Xml; using Lierda.WPFHelper; using log4net; using PCScreenSavers.Business; using PCScreenSavers.Common; using PCScreenSavers.ViewModel; using PCScreenSavers.Win; using WebSocket4Net; namespace PCScreenSavers { /// /// App.xaml 的交互逻辑 /// public partial class App : Application { internal string HttpUrl = ""; internal string KioskURL = ""; internal string LocalIP = ""; internal string configwebsocket = "ws://192.168.0.250:8111"; internal string isOnlyScreensaver = "0"; internal string Appversion = ""; internal string TouchType = ""; internal NavViewModel navModel = new NavViewModel(); internal static bool Downloaddone = false; private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); Class_Log clog = new Class_Log(); internal List TopSubTitle = new List { }; internal List BottomSubTitle = new List { }; internal int TopSubTitleIndex = 0; internal int BottomSubTitleIndex = 0; internal bool isGotoStart = false; internal string StartTime = ""; internal bool isSameScreen = false; internal int PlayTime = 0; internal WebSocket websocket = null; //LierdaCracker cracker = new LierdaCracker(); //e:Url|IP private void Application_Startup(object sender, StartupEventArgs e) { //cracker.Cracker(300);//垃圾回收间隔时间 try { string info = ""; bool update = true; clog.WriteLogFile("收到:" + e.Args.Count(), "Loadargs"); if (e.Args.Count() > 0) { clog.WriteLogFile("收到:"+e.Args[0].ToString(),"Loadargs"); string[] inf = e.Args[0].ToString().Split('&'); clog.WriteLogFile("inf.Count():" + inf.Count().ToString(), "Loadargs"); if (inf.Count() > 0) { if (!string.IsNullOrEmpty(inf[0])) { clog.WriteLogFile("inf[0]:" + inf[0].ToString(), "Loadargs"); string[] str = inf[0].Split('|'); clog.WriteLogFile("str.Count():" + str.Count().ToString(), "Loadargs"); if (str.Count() > 1) { clog.WriteLogFile("str[0]:" + str[0].ToString(), "Loadargs"); clog.WriteLogFile("str[1]:" + str[1].ToString(), "Loadargs"); HttpUrl = str[0]; LocalIP = str[1]; configwebsocket = str[2]; isOnlyScreensaver = str[3]; info = str[0] + "|" + str[1] + "|" + str[2]+"|"+ str[3]; clog.WriteLogFile("info:" + info.ToString(), "Loadargs"); } } } //if (inf.Count() > 1) // update = false; } VersionUpdate version = new VersionUpdate(); string currentVersion = string.Empty; List updateList = version.IsUpdate(out currentVersion, "http://"+ HttpUrl + "/update/PCScreen.xml"); if (updateList.Count>0) { System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent(); //创建Windows用户主题 System.Windows.Forms.Application.EnableVisualStyles(); System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity); //判断当前登录用户是否为管理员 if (!principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)) { //创建启动对象 System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); //设置运行文件 startInfo.WorkingDirectory = System.Windows.Forms.Application.ExecutablePath.Replace("\\", "/").Substring(0, System.Windows.Forms.Application.ExecutablePath.Replace("\\", "/").LastIndexOf("/"));//设置应用程序在其所在目录 startInfo.FileName = startInfo.WorkingDirectory + "/PCStart.exe"; //设置启动参数 startInfo.Arguments = info; //设置启动动作,确保以管理员身份运行 startInfo.Verb = "runas"; //如果不是管理员,则启动UAC //log.WriteLogFile("工作路径:" + startInfo.WorkingDirectory, "APPError"); System.Diagnostics.Process.Start(startInfo); //退出 System.Windows.Forms.Application.Exit(); } else { System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.WorkingDirectory = System.Windows.Forms.Application.ExecutablePath.Replace("\\", "/").Substring(0, System.Windows.Forms.Application.ExecutablePath.Replace("\\", "/").LastIndexOf("/"));//设置应用程序在其所在目录 p.StartInfo.FileName = p.StartInfo.WorkingDirectory + "/PCStart.exe"; p.StartInfo.Arguments = info; p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动 p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息 p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息 p.StartInfo.RedirectStandardError = true;//重定向标准错误输出 p.StartInfo.CreateNoWindow = false;//不显示程序窗口 p.Start();//启动程序 } Environment.Exit(0); } //if (e.Args.Count() > 0) //{ // string[] str = e.Args[0].ToString().Split('|'); //} this.LoadInitialConfig(); Class_Config config = new Class_Config(); config.LoadProgramConfig(); //MainWindow window = new MainWindow(); //window.Show(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); Application.Current.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(Current_DispatcherUnhandledException); } public void LoadInitialConfig() { try { string strConfigxml = AppDomain.CurrentDomain.BaseDirectory + "config//Screensaver.xml"; if (File.Exists(strConfigxml) == true) { XmlDocument doc = new XmlDocument(); doc.Load(strConfigxml); XmlNode xnFirst = doc.SelectSingleNode("Config"); XmlNode xnSecond = xnFirst.SelectSingleNode("Parameter"); if (xnSecond == null) { this.TouchType = ""; return; } else { if (xnSecond.SelectSingleNode("TouchType").InnerText != ""&&isOnlyScreensaver=="0") this.TouchType = xnSecond.SelectSingleNode("TouchType").InnerText; } } } catch { this.TouchType = ""; } } private void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { log.Error(e.Exception.Message + e.Exception.StackTrace); e.Handled = true; } private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Exception ex = (Exception)e.ExceptionObject; log.Error(ex.Message + ex.StackTrace); } private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e) { } internal int currentIndex = 0; internal WindowView view; private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { log.Error(e.Exception.Message + e.Exception.StackTrace); e.Handled = true; } } }