forked from ClassIsland/ClassIsland
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAppBase.cs
100 lines (82 loc) · 2.63 KB
/
AppBase.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System.Reflection;
using System.Windows;
using ClassIsland.Shared;
namespace ClassIsland.Core;
/// <summary>
/// 应用对象基类
/// </summary>
public abstract class AppBase : Application, IAppHost
{
/// <summary>
/// 获取当前应用程序实例。
/// </summary>
public new static AppBase Current => (Application.Current as AppBase)!;
/// <summary>
/// 重启应用程序。
/// </summary>
/// <param name="quiet">是否静默重启</param>
public abstract void Restart(bool quiet=false);
/// <summary>
/// 重启应用程序。
/// </summary>
/// <param name="parameters">重启应用时使用的参数</param>
public abstract void Restart(string[] parameters);
/// <summary>
/// 停止当前应用程序。
/// </summary>
public abstract void Stop();
/// <summary>
/// 获取应用是否已裁剪资源。
/// </summary>
/// <returns></returns>
public abstract bool IsAssetsTrimmed();
/// <summary>
/// 应用是否属于开发构建
/// </summary>
public abstract bool IsDevelopmentBuild { get; }
/// <summary>
/// 应用是否处于 MSIX 打包
/// </summary>
public abstract bool IsMsix { get; }
/// <summary>
/// 当应用启动时触发。
/// </summary>
public abstract event EventHandler? AppStarted;
/// <summary>
/// 当应用正在停止时触发。
/// </summary>
public abstract event EventHandler? AppStopping;
/// <summary>
/// 应用打包类型
/// </summary>
public string PackagingType => IsMsix ? "msix" : "singleFile";
/// <summary>
/// 应用二进制文件的平台架构
/// </summary>
public abstract string Platform { get; }
/// <summary>
/// 应用二进制文件面向的操作系统
/// </summary>
public abstract string OperatingSystem { get; }
/// <summary>
/// 应用分发频道
/// </summary>
public string AppSubChannel => $"{OperatingSystem}_{Platform}_{(IsAssetsTrimmed() ? "trimmed" : "full")}_{PackagingType}";
internal AppBase()
{
}
/// <summary>
/// 应用版本
/// </summary>
public static string AppVersion => Assembly.GetExecutingAssembly().GetName().Version!.ToString();
/// <summary>
/// 应用版本代号
/// </summary>
// ReSharper disable once StringLiteralTypo
public static string AppCodeName => "Himeko";
/// <summary>
/// 应用长版本号
/// </summary>
public static string AppVersionLong =>
$"{AppVersion}-{AppCodeName}-{ThisAssembly.Git.Commit}({ThisAssembly.Git.Branch}) (Core {IAppHost.CoreVersion})";
}