Repository navigation
Expand file tree
/
Copy pathMauiProgram.cs
More file actions
82 lines (70 loc) · 2.97 KB
/
Copy pathMauiProgram.cs
File metadata and controls
82 lines (70 loc) · 2.97 KB
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
using Microsoft.Extensions.Logging;
using clipboard.Services;
using clipboard.Utils;
#if WINDOWS
using clipboard.Platforms.Windows.Services;
using System.Threading;
#endif
namespace clipboard
{
public static class MauiProgram
{
private static Mutex? _singleInstanceMutex;
public static MauiApp CreateMauiApp()
{
// 解析命令行参数(优先于设置)
var args = Environment.GetCommandLineArgs();
bool enableFileLoggingFromArgs = args.Contains("--log", StringComparer.OrdinalIgnoreCase);
#if WINDOWS
// 检查是否已有实例在运行
const string mutexName = "Global\\ClipboardManager_SingleInstance";
bool createdNew;
// 确保在应用退出时释放 Mutex
AppDomain.CurrentDomain.ProcessExit += (s, e) =>
{
_singleInstanceMutex?.ReleaseMutex();
_singleInstanceMutex?.Dispose();
};
_singleInstanceMutex = new Mutex(true, mutexName, out createdNew);
if (!createdNew)
{
// 已有实例在运行,退出当前进程
System.Diagnostics.Debug.WriteLine("Another instance is already running. Exiting...");
Environment.Exit(0);
return null!; // 不会执行到这里,但为了编译通过
}
#endif
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
#if DEBUG
builder.Logging.AddDebug();
#endif
// 注册服务
var settingsService = new AppSettingsService();
builder.Services.AddSingleton<AppSettingsService>(settingsService);
// 加载设置并应用文件日志配置
// 命令行参数优先于设置
var settings = settingsService.GetSettings();
bool enableFileLogging = enableFileLoggingFromArgs || settings.EnableFileLogging;
DebugHelper.SetFileLoggingEnabled(enableFileLogging);
var clipboardManager = new ClipboardManagerService();
clipboardManager.SetSettingsService(settingsService);
builder.Services.AddSingleton<IClipboardService>(clipboardManager);
#if WINDOWS
var windowsService = new WindowsClipboardService();
windowsService.SetSettingsService(settingsService);
var pasteService = new Platforms.Windows.Services.PasteService();
windowsService.SetPasteService(pasteService);
builder.Services.AddSingleton<Platforms.Windows.Services.PasteService>(pasteService);
clipboardManager.SetPlatformService(windowsService);
#endif
return builder.Build();
}
}
}