-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApp.xaml.cs
More file actions
66 lines (57 loc) · 2.12 KB
/
Copy pathApp.xaml.cs
File metadata and controls
66 lines (57 loc) · 2.12 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
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows;
using Caelum.Services;
namespace Caelum
{
public partial class App : Application
{
static App()
{
WindowsEnvironment.NormalizeForWpf();
}
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern bool SetDllDirectory(string lpPathName);
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
LocalizationService.ApplyLanguage(AppSettingsService.Load().Language);
EnsurePdfiumDllPath();
var mainWindow = new MainWindow();
mainWindow.Show();
}
protected override void OnExit(ExitEventArgs e)
{
// ThemeService subscribes to the process-wide Windows preference
// event so open windows can follow System/HighContrast changes.
// Always detach it before WPF tears down the dispatcher.
ThemeService.Shutdown();
base.OnExit(e);
}
private static void EnsurePdfiumDllPath()
{
string baseDir = AppContext.BaseDirectory;
string[] candidates = new[]
{
Path.Combine(baseDir, "x64"),
Path.Combine(baseDir, "x86"),
baseDir,
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "x64"),
Path.GetDirectoryName(Environment.ProcessPath) ?? baseDir,
Path.Combine(Path.GetDirectoryName(Environment.ProcessPath) ?? baseDir, "x64"),
};
foreach (var dir in candidates)
{
string dllPath = Path.Combine(dir, "pdfium.dll");
if (File.Exists(dllPath))
{
SetDllDirectory(dir);
System.Diagnostics.Debug.WriteLine($"[App] SetDllDirectory -> {dir}");
return;
}
}
System.Diagnostics.Debug.WriteLine("[App] WARNING: pdfium.dll not found in any candidate directory");
}
}
}