static void Main(string[] args) { string configDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "AutoDarkMode"); // Targets where to log to: File and Console NLog.Targets.FileTarget logfile = new("logfile") { FileName = Path.Combine(configDir, "updater.log"), Layout = @"${date:format=yyyy-MM-dd HH\:mm\:ss} | ${level} | " + "${callsite:includeNamespace=False:" + "cleanNamesOfAnonymousDelegates=true:" + "cleanNamesOfAsyncContinuations=true}: ${message} ${exception:format=ShortType,Message,Method:separator= > }" }; NLog.Targets.ColoredConsoleTarget logconsole = new("logconsole") { Layout = @"${date:format=yyyy-MM-dd HH\:mm\:ss} | ${level} | " + "${callsite:includeNamespace=False:" + "cleanNamesOfAnonymousDelegates=true:" + "cleanNamesOfAsyncContinuations=true}: ${message} ${exception:format=ShortType,Message,Method:separator= > }" }; NLog.Config.LoggingConfiguration logConfig = new(); logConfig.AddRule(LogLevel.Debug, LogLevel.Fatal, logconsole); logConfig.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile); LogManager.Configuration = logConfig; Logger.Info($"Auto Dark Mode Updater {Version.Major}.{Version.Minor}.{Version.Build}"); bool serviceClosed = false; try { Logger.Info("shutting down service"); string result = client.SendMessageAndGetReply(Command.Shutdown); ApiResponse response = ApiResponse.FromString(result); if (response.StatusCode == StatusCode.Timeout) { serviceClosed = true; } } catch (Exception ex) { Logger.Warn(ex, "could not cleanly shut down service"); } if (!serviceClosed) { Logger.Info($"waiting for service to stop"); try { for (int i = 0; i < 5; i++) { string result = client.SendMessageAndGetReply(Command.Alive, 1); ApiResponse response = ApiResponse.FromString(result); if (response.StatusCode != StatusCode.Timeout) { Thread.Sleep(500); } else { break; } } } catch (Exception ex) { Logger.Error(ex, "error while waiting for service process to end:"); } } try { Process[] pSvc = Process.GetProcessesByName("AutoDarkModeSvc"); if (pSvc.Length != 0) { Logger.Warn("service still running, force stopping"); pSvc[0].Kill(); } Logger.Info("service stop confirmed"); Process[] pShell = Process.GetProcessesByName("AutoDarkModeShell"); Process[] pApp = Process.GetProcessesByName("AutoDarkModeApp"); if (pShell.Length != 0) { Logger.Info("stopping shell"); pShell[0].Kill(); restoreShell = true; } if (pApp.Length != 0) { Logger.Info("stopping app"); pApp[0].Kill(); restoreApp = true; } } catch (Exception ex) { Logger.Warn(ex, "other auto dark mode components still running, skipping update"); Relaunch(restoreShell, restoreApp, true); Environment.Exit(-2); } if (args.Length > 2) { if (args[0].Contains("--notify")) { restoreShell = args[1].Equals(true.ToString(), StringComparison.Ordinal); restoreApp = args[2].Equals(true.ToString(), StringComparison.Ordinal); } } MoveToTemp(); CopyNewFiles(); UpdateInnoInstallerString(); Cleanup(); Relaunch(restoreShell, restoreApp, false); try { FileVersionInfo currentVersion = FileVersionInfo.GetVersionInfo(Extensions.ExecutionPathSvc); if (currentVersion != null) { Logger.Info($"patch complete, installed version: {currentVersion.FileVersion}"); } } catch (Exception ex) { Logger.Warn(ex, "could not read installed version:"); Logger.Info("patch complete, starting service"); } }
private void Application_Startup(object sender, StartupEventArgs e) { if (!Mutex.WaitOne(TimeSpan.FromMilliseconds(100))) { Shutdown(); } List <string> args = new List <string>(); if (e.Args.Length > 0) { args = new List <string>(e.Args); } if (args.Count > 0 && args.Contains("/debug")) { debug = true; args.Remove("/debug"); } StartService(); int maxTries = 5; int tries = 0; bool heartBeatOK = false; while (tries < maxTries && !heartBeatOK) { tries++; heartBeatOK = commandClient.SendMessage(Command.Alive); } if (maxTries == tries && !heartBeatOK) { string error = "could not get a heartbeat from the backend. Check if AutoDarkModeSvc.exe is running and try again"; MsgBox msg = new MsgBox(error, AutoDarkModeApp.Properties.Resources.errorOcurredTitle, "error", "close") { }; msg.ShowDialog(); return; } //handle command line arguments if (args.Count > 0) { Thread.Sleep(1000); Mutex.Dispose(); Mutex = new Mutex(true, "7f326fe1-181c-414f-b7f1-0df4baa578a7"); Mutex.WaitOne(TimeSpan.FromMilliseconds(100)); foreach (var value in args) { if (value == "/switch") { commandClient.SendMessage(value); } else if (value == "/swap") { commandClient.SendMessage(value); } else if (value == "/dark") { commandClient.SendMessage(value); } else if (value == "/light") { commandClient.SendMessage(value); } else if (value == "/noForce") { commandClient.SendMessage(value); } else if (value == "/update") { var result = commandClient.SendMessageAndGetReply(value); if (result != Response.Err) { Updater updater = new Updater(true); updater.ParseResponse(result); } } else if (value == "/location") { commandClient.SendMessage(Command.Location); } else if (value == "/removeAutostart") { RegeditHandler regEditHandler = new RegeditHandler(); regEditHandler.RemoveAutoStart(); } else if (value == "/shutdownService") { commandClient.SendMessage(Command.Shutdown); } else if (value == "/pipeclienttest") { //ICommandClient pc = new PipeClient(Tools.DefaultPipeName); bool result = commandClient.SendMessage(Command.Location); Console.Out.WriteLine(result); } NetMQConfig.Cleanup(); Mutex.Dispose(); Shutdown(); } } else { MainWindow mainWin = new MainWindow(); mainWin.Show(); } }