Application.xaml.vb 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. Imports System.Reflection
  2. Class Application
  3. Private Sub Application_Startup(ByVal sender As Object, ByVal e As System.Windows.StartupEventArgs) Handles Me.Startup
  4. Try
  5. Process.GetCurrentProcess.PriorityClass = ProcessPriorityClass.High
  6. Application.Current.Dispatcher.Thread.Priority = ThreadPriority.AboveNormal
  7. '基础初始化
  8. AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf AssemblyResolve '动态 DLL 调用
  9. LoadTimeCost = My.Computer.Clock.TickCount
  10. Directory.CreateDirectory(PATH & "PCL")
  11. Directory.CreateDirectory(PATH & "PCL\cache")
  12. Directory.CreateDirectory(PATH & "PCL\download")
  13. Try
  14. File.Delete(PATH & "PCL\log.txt")
  15. Catch
  16. End Try
  17. log("[Application] 程序启动,版本:" & VERSION_NAME & "(" & VERSION_CODE & ")")
  18. '读取设置
  19. MODE_DEBUG = ReadReg("SysTest", "False")
  20. MODE_DEVELOPER = File.Exists(PATH & "Plain Craft Launcher Developer Tag")
  21. '配置初始化
  22. Net.ServicePointManager.DefaultConnectionLimit = 1024
  23. Catch ex As Exception
  24. If MsgBox("程序初始化时出现异常:" & GetStringFromException(ex, True) & vbCrLf & "是否愿意打开反馈页面来反馈这个问题?" & vbCrLf & "这会帮助作者解决问题,否则它将永远不会得到解决!", MsgBoxStyle.Critical + MsgBoxStyle.YesNo, "炸了") = MsgBoxResult.Yes Then Feedback()
  25. End Try
  26. End Sub
  27. Private Sub Application_DispatcherUnhandledException(ByVal sender As Object, ByVal e As System.Windows.Threading.DispatcherUnhandledExceptionEventArgs) Handles Me.DispatcherUnhandledException
  28. On Error Resume Next
  29. log("[Application] 请把这个 Log 文件发送给作者,以助于改进这个启动器,谢谢~")
  30. log("[Application] 异常的详细信息:" & vbCrLf & GetStringFromException(e.Exception, True))
  31. If MsgBox("程序出现异常:" & GetStringFromException(e.Exception, True) & vbCrLf & "是否愿意打开反馈页面来反馈这个问题?" & vbCrLf & "这会帮助作者解决问题,否则它将永远不会得到解决!", MsgBoxStyle.Critical + MsgBoxStyle.YesNo, "炸了") = MsgBoxResult.Yes Then Feedback()
  32. EndForce()
  33. End Sub
  34. '动态 DLL 调用
  35. Private Ionic As Assembly = Assembly.Load(My.Resources.ResourceManager.GetObject("Ionic_Zip"))
  36. Private Newtonsoft As Assembly = Assembly.Load(My.Resources.ResourceManager.GetObject("Newtonsoft_Json"))
  37. Private Function AssemblyResolve(sender As Object, args As ResolveEventArgs) As Assembly
  38. Dim Name As String = New AssemblyName(args.Name).Name
  39. Select Case Name
  40. Case "Ionic.Zip"
  41. Return Ionic
  42. Case "Newtonsoft.Json"
  43. Return Newtonsoft
  44. Case Else
  45. Return Nothing
  46. End Select
  47. End Function
  48. End Class