Program.cs
 1  // Copyright (c) Microsoft Corporation
 2  // The Microsoft Corporation licenses this file to you under the MIT license.
 3  // See the LICENSE file in the project root for more information.
 4  
 5  using System;
 6  using System.Runtime.InteropServices;
 7  using System.Threading;
 8  using ManagedCommon;
 9  using Microsoft.CommandPalette.Extensions;
10  using Shmuelie.WinRTServer;
11  using Shmuelie.WinRTServer.CsWinRT;
12  
13  namespace PowerToysExtension;
14  
15  public class Program
16  {
17      [MTAThread]
18      public static void Main(string[] args)
19      {
20          try
21          {
22              // Initialize per-extension log under CmdPal/PowerToysExtension.
23              Logger.InitializeLogger("\\CmdPal\\PowerToysExtension\\Logs");
24              Logger.LogInfo($"PowerToysExtension starting. Args=\"{string.Join(' ', args)}\" ProcArch={RuntimeInformation.ProcessArchitecture} OSArch={RuntimeInformation.OSArchitecture} BaseDir={AppContext.BaseDirectory}");
25          }
26          catch
27          {
28              // Continue even if logging fails.
29          }
30  
31          try
32          {
33              if (args.Length > 0 && args[0] == "-RegisterProcessAsComServer")
34              {
35                  Logger.LogInfo("RegisterProcessAsComServer mode detected.");
36                  ComServer server = new();
37                  ManualResetEvent extensionDisposedEvent = new(false);
38                  try
39                  {
40                      PowerToysExtension extensionInstance = new(extensionDisposedEvent);
41                      Logger.LogInfo("Registering extension via Shmuelie.WinRTServer.");
42                      server.RegisterClass<PowerToysExtension, IExtension>(() => extensionInstance);
43                      server.Start();
44                      Logger.LogInfo("Extension instance registered; waiting for disposal signal.");
45  
46                      extensionDisposedEvent.WaitOne();
47                      Logger.LogInfo("Extension disposed signal received; exiting server loop.");
48                  }
49                  finally
50                  {
51                      server.Stop();
52                      server.UnsafeDispose();
53                  }
54              }
55              else
56              {
57                  Console.WriteLine("Not being launched as a Extension... exiting.");
58                  Logger.LogInfo("Exited: not launched with -RegisterProcessAsComServer.");
59              }
60          }
61          catch (Exception ex)
62          {
63              Logger.LogError("Unhandled exception in PowerToysExtension.Main", ex);
64              throw;
65          }
66          finally
67          {
68          }
69      }
70  }