1
1
using System ;
2
+ using System . Reflection ;
2
3
using System . Runtime . InteropServices ;
3
4
using System . Threading ;
4
5
using Microsoft . UI . Dispatching ;
@@ -26,7 +27,23 @@ private static void Main(string[] args)
26
27
try
27
28
{
28
29
ComWrappersSupport . InitializeComWrappers ( ) ;
29
- if ( ! CheckSingleInstance ( ) ) return ;
30
+ AppInstance mainInstance = GetMainInstance ( ) ;
31
+ if ( ! mainInstance . IsCurrent )
32
+ {
33
+ var activationArgs = AppInstance . GetCurrent ( ) . GetActivatedEventArgs ( ) ;
34
+ mainInstance . RedirectActivationToAsync ( activationArgs ) . AsTask ( ) . Wait ( ) ;
35
+ return ;
36
+ }
37
+
38
+ // Register for URI handling (known as "protocol activation")
39
+ #if DEBUG
40
+ const string scheme = "coder-debug" ;
41
+ #else
42
+ const string scheme = "coder" ;
43
+ #endif
44
+ var thisBin = Assembly . GetExecutingAssembly ( ) . Location ;
45
+ ActivationRegistrationManager . RegisterForProtocolActivation ( scheme , thisBin + ",1" , "Coder Desktop" , "" ) ;
46
+
30
47
Application . Start ( p =>
31
48
{
32
49
var context = new DispatcherQueueSynchronizationContext ( DispatcherQueue . GetForCurrentThread ( ) ) ;
@@ -38,6 +55,9 @@ private static void Main(string[] args)
38
55
e . Handled = true ;
39
56
ShowExceptionAndCrash ( e . Exception ) ;
40
57
} ;
58
+
59
+ // redirections via RedirectActivationToAsync above get routed to the App
60
+ mainInstance . Activated += app . OnActivated ;
41
61
} ) ;
42
62
}
43
63
catch ( Exception e )
@@ -46,20 +66,17 @@ private static void Main(string[] args)
46
66
}
47
67
}
48
68
49
- [ STAThread ]
50
- private static bool CheckSingleInstance ( )
69
+ private static AppInstance GetMainInstance ( )
51
70
{
52
71
#if ! DEBUG
53
72
const string appInstanceName = "Coder.Desktop.App" ;
54
73
#else
55
74
const string appInstanceName = "Coder.Desktop.App.Debug" ;
56
75
#endif
57
76
58
- var instance = AppInstance . FindOrRegisterForKey ( appInstanceName ) ;
59
- return instance . IsCurrent ;
77
+ return AppInstance . FindOrRegisterForKey ( appInstanceName ) ;
60
78
}
61
79
62
- [ STAThread ]
63
80
private static void ShowExceptionAndCrash ( Exception e )
64
81
{
65
82
const string title = "Coder Desktop Fatal Error" ;
0 commit comments