private static void DoPreamble() { // Make sure the temp directory exists if (!TempDirectoryCreator.CheckTempExists()) { MessageBoxes.Error(@"Qiqqa needs the directory {0} to exist for it to function properly. Please create it or set the TEMP environment variable and restart Qiqqa.", TempFile.TempDirectory); } // Make sure that windir is set (goddamned font sybustem bug: http://stackoverflow.com/questions/10094197/wpf-window-throws-typeinitializationexception-at-start-up) { if (String.IsNullOrEmpty(Environment.GetEnvironmentVariable("windir"))) { Logging.Warn("Environment variable windir is empty so setting it to {0}", Environment.GetEnvironmentVariable("SystemRoot")); Environment.SetEnvironmentVariable("windir", Environment.GetEnvironmentVariable("SystemRoot")); } } Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; string on_your_conscience = "Qiqqa is Copyright © Quantisle 2010-2016. All rights reserved." + "If you are reading this in a disassembler, you know you are doing evil and will probably always have to look over your shoulder..." ; on_your_conscience = "Main"; Thread.CurrentThread.Name = on_your_conscience; if (RegistrySettings.Instance.IsSet(RegistrySettings.DebugConsole)) { Console.Instance.Init(); Logging.Info("Console initialised"); } // Support windows-level error reporting - helps suppressing the errors in pdfdraw.exe and QiqqaOCR.exe // https://msdn.microsoft.com/en-us/library/windows/desktop/ms680621%28v=vs.85%29.aspx if (true) { try { SetErrorMode(0x0001 | 0x0002 | 0x0004 | 0x8000); } catch (Exception ex) { Logging.Error(ex, "Error trying to suppress global process failure."); } } if (true) { AppDomain.CurrentDomain.AssemblyLoad += delegate(object sender, AssemblyLoadEventArgs args) { Logging.Info("Loaded assembly: {0}", args.LoadedAssembly.FullName); }; } try { FirstInstallWebLauncher.Check(); } catch (Exception ex) { Logging.Error(ex, "Unknown exception during FirstInstallWebLauncher.Check()."); } try { FileAssociationRegistration.DoRegistration(); } catch (Exception ex) { Logging.Error(ex, "Unknown exception during FileAssociationRegistration.DoRegistration()."); } //// Start tracing WPF events //WPFTrace wpf_trace = new WPFTrace(); //PresentationTraceSources.Refresh(); //PresentationTraceSources.DataBindingSource.Listeners.Add(wpf_trace); //PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Error; //System.Diagnostics.Trace.AutoFlush = true; // If we have a command line parameter and another instance is running, send it to them and exit if (true) { string[] command_line_args = Environment.GetCommandLineArgs(); if (1 < command_line_args.Length && !ProcessSingleton.IsProcessUnique(false)) { IPCClient.SendMessage(command_line_args[1]); Environment.Exit(-2); } } // Check that we are the only instance running if (true) { try { if (!RegistrySettings.Instance.IsSet(RegistrySettings.AllowMultipleQiqqaInstances) && !ProcessSingleton.IsProcessUnique(true)) { MessageBoxes.Info("There seems to be an instance of Qiqqa already running so Qiqqa will not start again.\n\nSometimes it takes a few moments for Qiqqa to exit as it finishes up a final OCR or download. If this problem persists, you can kill the Qiqqa.exe process in Task Manager."); Logging.Info("There is another instance of Qiqqa running, so exiting."); Environment.Exit(-1); } } catch (Exception ex) { Logging.Error(ex, "Unknown exception while checking for single app instance. Continuing as normal so there could be several Qiqqas running."); } } ComputerStatistics.LogCommonStatistics(); }
private static void DoPreamble() { // Make sure the temp directory exists if (!TempDirectoryCreator.CheckTempExists()) { MessageBoxes.Error(@"Qiqqa needs the directory {0} to exist for it to function properly. Please create it or set the TEMP environment variable and restart Qiqqa.", TempFile.TempDirectoryForQiqqa); } // Make sure that windir is set (goddamned font subsystem bug: http://stackoverflow.com/questions/10094197/wpf-window-throws-typeinitializationexception-at-start-up) { if (String.IsNullOrEmpty(Environment.GetEnvironmentVariable("windir"))) { Logging.Warn("Environment variable windir is empty so setting it to {0}", Environment.GetEnvironmentVariable("SystemRoot")); Environment.SetEnvironmentVariable("windir", Environment.GetEnvironmentVariable("SystemRoot")); } } Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.Name = "Main"; if (RegistrySettings.Instance.IsSet(RegistrySettings.DebugConsole)) { Console.Instance.Init(); Logging.Info("Console initialised"); } // Support windows-level error reporting - helps suppressing the errors in pdfdraw.exe and QiqqaOCR.exe // https://msdn.microsoft.com/en-us/library/windows/desktop/ms680621%28v=vs.85%29.aspx try { SetErrorMode(0x0001 | 0x0002 | 0x0004 | 0x8000); } catch (Exception ex) { Logging.Error(ex, "Error trying to suppress global process failure."); } // kick the number of threads in the threadpool down to a reasonable number SafeThreadPool.SetMaxActiveThreadCount(); AppDomain.CurrentDomain.AssemblyLoad += delegate(object sender, AssemblyLoadEventArgs args) { Logging.Info("Loaded assembly: {0}", args.LoadedAssembly.FullName); Logging.TriggerInit(); }; #if CEFSHARP #region CEFsharp setup // CEFsharp setup for AnyPC as per https://github.com/cefsharp/CefSharp/issues/1714: AppDomain.CurrentDomain.AssemblyResolve += CefResolver; InitCef(); #endregion CEFsharp setup #endif try { FirstInstallWebLauncher.Check(); } catch (Exception ex) { Logging.Error(ex, "Unknown exception during FirstInstallWebLauncher.Check()."); } try { FileAssociationRegistration.DoRegistration(); } catch (Exception ex) { Logging.Error(ex, "Unknown exception during FileAssociationRegistration.DoRegistration()."); } // Start tracing WPF events #if DEBUG WPFTrace wpf_trace = new WPFTrace(); PresentationTraceSources.Refresh(); PresentationTraceSources.DataBindingSource.Listeners.Add(wpf_trace); PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Error; System.Diagnostics.Trace.AutoFlush = true; #endif // If we have a command line parameter and another instance is running, send it to them and exit string[] command_line_args = Environment.GetCommandLineArgs(); if (1 < command_line_args.Length && !ProcessSingleton.IsProcessUnique(false)) { IPCClient.SendMessage(command_line_args[1]); Environment.Exit(-2); } // Check that we are the only instance running try { if (!RegistrySettings.Instance.IsSet(RegistrySettings.AllowMultipleQiqqaInstances) && !ProcessSingleton.IsProcessUnique(bring_other_process_to_front_if_it_exists: true)) { MessageBoxes.Info("There seems to be an instance of Qiqqa already running so Qiqqa will not start again.\n\nSometimes it takes a few moments for Qiqqa to exit as it finishes up a final OCR or download. If this problem persists, you can kill the Qiqqa.exe process in Task Manager."); Logging.Info("There is another instance of Qiqqa running, so exiting."); Environment.Exit(-1); } } catch (Exception ex) { Logging.Error(ex, "Unknown exception while checking for single app instance. Continuing as normal so there could be several Qiqqas running."); } ComputerStatistics.LogCommonStatistics(); }