public static void Main() { App app = new App(); // splash Splasher.Splash = new View.SplashScreen(); Splasher.ShowSplash(); //for (int i = 0; i < 5000; i += 1) //{ // MessageListener.Instance.ReceiveMessage(string.Format("Load module {0}", i)); // Thread.Sleep(1); //} // таймаут запуска приложения string cfgValue = CfgFileHelper.GetAppSetting("StartTimeout"); int startTimeout = 0; if (cfgValue != null) { startTimeout = cfgValue.ToInt(); } if (startTimeout != 0) { for (int i = startTimeout; i > 0; i--) { MessageListener.Instance.ReceiveMessage($"Таймаут запуска приложения - {i} секунд."); System.Threading.Thread.Sleep(1000); } } MessageListener.Instance.ReceiveMessage("Инициализация журнала событий..."); cfgValue = AppLib.InitAppLogger(); if (cfgValue != null) { appExit(1, "Ошибка инициализации журнала приложения: " + cfgValue); } System.Threading.Thread.Sleep(500); AppLib.WriteLogInfoMessage("**** Start application ****"); // защита PSW-файлом // текст в MessageListener.Instance прибинден к текстовому полю на сплэше MessageListener.Instance.ReceiveMessage("Проверка лицензии..."); pswLib.CheckProtectedResult checkProtectedResult; if (pswLib.Hardware.IsCurrentAppProtected("ClientOrderQueue", out checkProtectedResult) == false) { AppLib.WriteLogErrorMessage(checkProtectedResult.LogMessage); appExit(2, checkProtectedResult.CustomMessage); return; } System.Threading.Thread.Sleep(500); // информация о файлах, сборках и настройках из конфиг-файлов MessageListener.Instance.ReceiveMessage("Получаю информацию о сборках и настройках..."); // для хранения в свойствах приложения (из config-файла или др.) setAppGlobalValues(); AppLib.WriteLogInfoMessage(" - файл: {0}, Version {1}", AppEnvironment.GetAppFullFile(), AppEnvironment.GetAppVersion()); ITSAssemblyInfo asmInfo = new ITSAssemblyInfo("IntegraLib"); AppLib.WriteLogInfoMessage(" - Integra lib: '{0}', Version {1}", asmInfo.FullFileName, asmInfo.Version); asmInfo = new ITSAssemblyInfo("IntegraWPFLib"); AppLib.WriteLogInfoMessage(" - Integra WPF lib: '{0}', Version {1}", asmInfo.FullFileName, asmInfo.Version); AppLib.WriteLogInfoMessage("Системное окружение: " + AppEnvironment.GetEnvironmentString()); AppLib.WriteLogInfoMessage("Настройки из config-файла: " + CfgFileHelper.GetAppSettingsFromConfigFile()); // флажки для логов cfgValue = CfgFileHelper.GetAppSetting("IsWriteTraceMessages"); WpfHelper.SetAppGlobalValue("IsWriteTraceMessages", cfgValue.ToBool()); System.Threading.Thread.Sleep(300); // проверить доступность БД MessageListener.Instance.ReceiveMessage("Проверяю доступность к базе данных..."); AppLib.CheckDBConnection(typeof(KDSContext)); // настройка приложения app.InitializeComponent(); // определенные в app.xaml MessageListener.Instance.ReceiveMessage("Работаю..."); View.MainWindow mWindow = new View.MainWindow(); try { app.Run(mWindow); } catch (Exception ex) { AppLib.WriteLogErrorMessage(ex.ToString()); MessageBox.Show(ex.Message, "Error Application", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK); } AppLib.WriteLogInfoMessage("**** End application ****"); }
public static void Main() { App app = new App(); if (Microsoft.Shell.SingleInstance <App> .InitializeAsFirstInstance(Unique)) { string cfgValue; // установить текущий каталог на папку с приложением string setAppDirResult = setAppDirectory(); // splash-screen Splasher.Splash = new Views.SplashScreen(); Splasher.ShowSplash(); MessageListener.Instance.ReceiveMessage("Инициализация журнала событий..."); cfgValue = AppLib.InitAppLoggers(); if (cfgValue != null) { appExit(1, "Ошибка инициализации журнала приложения: " + cfgValue); } AppLib.WriteLogInfoMessage("************ Start NoodleD_Client (WPF) *************"); // объем доступной памяти MessageListener.Instance.ReceiveMessage("Check free RAM value..."); int freeMemory = AppLib.getAvailableRAM(); AppLib.WriteLogInfoMessage("Available RAM: " + freeMemory.ToString() + " MB"); if (freeMemory < 300) { AppLib.WriteLogErrorMessage("Terminate program by low memory."); AppLib.WriteLogInfoMessage("************ End application ************"); appExit(2, "This computer has too low available memory.\r\nYou need at least 300 MB free memory."); } if (setAppDirResult.IsNull() == false) { AppLib.WriteLogInfoMessage(setAppDirResult); } // таймаут запуска приложения cfgValue = CfgFileHelper.GetAppSetting("StartTimeout"); int startTimeout = 0; if (cfgValue != null) { startTimeout = cfgValue.ToInt(); } if (startTimeout != 0) { for (int i = startTimeout; i > 0; i--) { MessageListener.Instance.ReceiveMessage($"Таймаут запуска приложения - {i} секунд."); System.Threading.Thread.Sleep(1000); } } #region информация о сборках MessageListener.Instance.ReceiveMessage("Получаю информацию о сборках и настройках..."); ITSAssemblyInfo asmInfo = new ITSAssemblyInfo(AppEnvironment.GetAppAssemblyName()); AppLib.WriteLogInfoMessage($" - файл: {asmInfo.FullFileName}, version {asmInfo.Version}, last write date '{asmInfo.DateLastOpened.ToString()}'"); asmInfo = new ITSAssemblyInfo("IntegraLib"); AppLib.WriteLogInfoMessage($" - файл: {asmInfo.FullFileName}, version {asmInfo.Version}, last write date '{asmInfo.DateLastOpened.ToString()}'"); asmInfo = new ITSAssemblyInfo("IntegraWPFLib"); AppLib.WriteLogInfoMessage($" - файл: {asmInfo.FullFileName}, version {asmInfo.Version}, last write date '{asmInfo.DateLastOpened.ToString()}'"); AppLib.WriteLogInfoMessage("Системное окружение: " + AppEnvironment.GetEnvironmentString()); // номер устройства - не число! if (AppLib.GetAppSetting("ssdID").IsNumber() == false) { AppLib.WriteLogErrorMessage("** Номер устройства - НЕ ЧИСЛО !! **"); AppLib.WriteLogInfoMessage("************ End application ************"); appExit(4, "Номер устройства - НЕ ЧИСЛО!!"); } // основная информация о софт-окружении AppLib.WriteLogTraceMessage(string.Format("Настройки: Id устройства-{0}, папка изображений-{1}, таймер бездействия-{2} sec, диапазон номеров чеков от {3} до {4}, принтер пречека-{5}", AppLib.GetAppSetting("ssdID"), AppLib.GetAppSetting("ImagesPath"), AppLib.GetAppSetting("UserIdleTime"), AppLib.GetAppSetting("RandomOrderNumFrom"), AppLib.GetAppSetting("RandomOrderNumTo"), AppLib.GetAppSetting("PrinterName"))); //****** НАСТРОЙКИ ****** // определенные в app.xaml app.InitializeComponent(); // определенные в config-файле getSettingsFromConfigFile(); // вычислить размеры, хранимые в свойствах приложения calculateAppSizes(); // прочие глобальные настройки AppLib.SetAppGlobalValue("promoCode", null); //TestData.mainProc(); #endregion // проверка соединения с бд MessageListener.Instance.ReceiveMessage("Проверяю доступность к базе данных..."); AppLib.WriteLogTraceMessage("Проверка доступа к базе данных..."); AppLib.WriteLogTraceMessage(" - строка подключения: " + getDbConnectionString()); string errorMessage; while (AppLib.CheckDBConnection(typeof(NoodleDContext), out errorMessage) == false) { AppLib.WriteLogTraceMessage(" - result: " + errorMessage); // задержка на 10 сек for (int i = 10; i > 0; i--) { MessageListener.Instance.ReceiveMessage($"Проверка доступа к БД завершилась ошибкой!! (след.проверка через {i} сек)"); Thread.Sleep(1000); } MessageListener.Instance.ReceiveMessage("Проверяю доступность к базе данных..."); Thread.Sleep(500); } AppLib.WriteLogTraceMessage(" - result: Ok"); // настройки, определенные в ms sql readSettingFromDB(); // данные, хранящиеся в БД readAppDataFromDB(); // ожидашка int idleSec = (int)AppLib.GetAppGlobalValue("UserIdleTime", 0); if (idleSec > 0) { IdleHandler = new UserActionIdle(); IdleHandler.IdleSeconds = idleSec; IdleHandler.IdleElapseEvent += IdleHandler_IdleElapseEvent; IdleHandler.SetPause(); } // главное окно приложения MessageListener.Instance.ReceiveMessage("Запуск основного окна..."); Thread.Sleep(500); MainWindow mainWindow = new MainWindow(); try { app.Run(mainWindow); } catch (Exception ex) { AppLib.WriteLogErrorMessage(ex.ToString()); MessageBox.Show(ex.Message, "Error Application", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK); } AppLib.WriteLogInfoMessage("************ End application ************"); // подчистить память if (IdleHandler != null) { IdleHandler.Dispose(); } // Allow single instance code to perform cleanup operations Microsoft.Shell.SingleInstance <App> .Cleanup(); } }
public static void Main(string[] args) { // splash Splasher.Splash = new SplashScreen(); Splasher.ShowSplash(); //for (int i = 0; i < 5000; i += 1) //{ // MessageListener.Instance.ReceiveMessage(string.Format("Load module {0}", i)); // Thread.Sleep(1); //} // таймаут запуска приложения string cfgValue = CfgFileHelper.GetAppSetting("StartTimeout"); int startTimeout = 0; if (cfgValue != null) { startTimeout = cfgValue.ToInt(); } if (startTimeout != 0) { for (int i = startTimeout; i > 0; i--) { MessageListener.Instance.ReceiveMessage($"Таймаут запуска приложения - {i} секунд."); System.Threading.Thread.Sleep(1000); } } // текст в MessageListener.Instance прибинден к текстовому полю на сплэше MessageListener.Instance.ReceiveMessage("Инициализация журнала событий..."); AppLib.InitAppLogger(); AppLib.WriteLogInfoMessage("************ Start KDS Client (WPF) *************"); // установить текущий каталог на папку с приложением string curDir = System.IO.Directory.GetCurrentDirectory(); if (curDir.Last() != '\\') { curDir += "\\"; } string appDir = AppEnvironment.GetAppDirectory(); if (curDir != appDir) { AppLib.WriteLogInfoMessage("Текущий каталог изменен на папку приложения: " + appDir); System.IO.Directory.SetCurrentDirectory(appDir); } // защита PSW-файлом MessageListener.Instance.ReceiveMessage("Проверка лицензии..."); bool isLoyalClient = false; //isLoyalClient = ((args != null) && args.Contains("-autoGenLicence")); // ключ реестра HKLM\Software\Integra\autoGenLicence = 01 (binary) if (isLoyalClient == false) { isLoyalClient = RegistryHelper.IsExistsAutoGenLicenceKey(); } pswLib.CheckProtectedResult checkProtectedResult; if (pswLib.Hardware.IsCurrentAppProtected("KDSWPFClient", out checkProtectedResult, null, isLoyalClient) == false) { string errMsg = string.Format("{0}{1}{1}{2}", checkProtectedResult.LogMessage, Environment.NewLine, checkProtectedResult.CustomMessage); appExit(2, errMsg); } MessageListener.Instance.ReceiveMessage("Получение версии приложения..."); AppLib.WriteLogInfoMessage("Инициализация KDS-клиента..."); // проверка наличия уникального имени клиента в конфиг-файле cfgValue = CfgFileHelper.GetAppSetting("KDSClientName"); if (cfgValue.IsNull() == true) { cfgValue = "Не указано имя КДС-клиента в файле AppSettings.config."; appExit(3, cfgValue); } if (cfgValue.Equals("uniqClientName", StringComparison.OrdinalIgnoreCase)) { #if (Release == false) && (DEBUG == false) cfgValue = "Измените имя КДС-клиента в файле AppSettings.config"; appExit(3, cfgValue); #endif } KDSWPFClient.App app = new KDSWPFClient.App(); WpfHelper.SetAppGlobalValue("KDSClientName", cfgValue); App.ClientName = System.Convert.ToString(WpfHelper.GetAppGlobalValue("KDSClientName")); AppLib.WriteLogInfoMessage(" - имя КДС-клиента: {0}", App.ClientName); // информация о файлах и сборках AppLib.WriteLogInfoMessage(" - файл: {0}, Version {1}", AppEnvironment.GetAppFullFile(), AppEnvironment.GetAppVersion()); ITSAssemblyInfo asmInfo = new ITSAssemblyInfo("IntegraLib"); AppLib.WriteLogInfoMessage(" - Integra lib: '{0}', Version {1}", asmInfo.FullFileName, asmInfo.Version); asmInfo = new ITSAssemblyInfo("IntegraWPFLib"); AppLib.WriteLogInfoMessage(" - Integra WPF lib: '{0}', Version {1}", asmInfo.FullFileName, asmInfo.Version); MessageListener.Instance.ReceiveMessage("Получение параметров окружения..."); AppLib.WriteLogInfoMessage(AppEnvironment.GetEnvironmentString()); getAppLayout(); // настройка приложения MessageListener.Instance.ReceiveMessage("Получение параметров приложения..."); #if !DEBUG System.Threading.Thread.Sleep(500); #endif app.InitializeComponent(); // определенные в app.xaml setAppGlobalValues(); // для хранения в свойствах приложения (из config-файла или др.) AppLib.WriteLogInfoMessage("App settings from config file: " + CfgFileHelper.GetAppSettingsFromConfigFile()); // создать каналы AppLib.WriteLogInfoMessage("Создаю клиента для работы со службой KDSService - START"); AppDataProvider dataProvider = new AppDataProvider(); try { MessageListener.Instance.ReceiveMessage("Создание канала получения данных..."); #if !DEBUG System.Threading.Thread.Sleep(1000); #endif dataProvider.CreateGetChannel(); MessageListener.Instance.ReceiveMessage("Создание канала установки данных..."); #if !DEBUG System.Threading.Thread.Sleep(1000); #endif dataProvider.CreateSetChannel(); AppLib.WriteLogInfoMessage("Создаю клиента для работы со службой KDSService - FINISH"); } catch (Exception) { AppLib.WriteLogErrorMessage("Data provider error: " + dataProvider.ErrorMessage); } // и получить словари и настройки от службы MessageListener.Instance.ReceiveMessage("Получаю словари и настройки от службы KDSService..."); #if !DEBUG System.Threading.Thread.Sleep(500); #endif AppLib.WriteLogInfoMessage("Получаю словари и настройки от службы KDSService - START"); if (dataProvider.SetDictDataFromService() == false) { // КДСы могут быть уже запущены, а служба еще нет! AppLib.WriteLogErrorMessage("Data provider error: " + dataProvider.ErrorMessage); //if (splashScreen != null) splashScreen.Close(TimeSpan.FromMinutes(10)); //MessageBox.Show("Ошибка получения словарей от службы KDSService:" + Environment.NewLine + dataProvider.ErrorMessage, "АВАРИЙНОЕ ЗАВЕРШЕНИЕ ПРИЛОЖЕНИЯ", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK); //Environment.Exit(2); } else { AppLib.WriteLogInfoMessage("Получаю словари и настройки от службы KDSService - FINISH"); } WpfHelper.SetAppGlobalValue("AppDataProvider", dataProvider); // прочитать из config-а и сохранить в свойствах приложения режим КДС MessageListener.Instance.ReceiveMessage("Получаю из config-файла режим работы КДС..."); #if !DEBUG System.Threading.Thread.Sleep(500); #endif KDSModeHelper.Init(); // создать и сохранить в свойствах приложения служебные окна (ColorLegend, StateChange) MessageListener.Instance.ReceiveMessage("Создаю служебные окна..."); #if !DEBUG System.Threading.Thread.Sleep(500); #endif WpfHelper.SetAppGlobalValue("ColorLegendWindow", new ColorLegend()); // окно легенды // окно изменения статуса WpfHelper.SetAppGlobalValue("StateChangeWindow", new StateChange()); // основное окно приложения MessageListener.Instance.ReceiveMessage("Инициализация окна приложения..."); #if !DEBUG System.Threading.Thread.Sleep(1000); #endif MainWindow mainWindow = new MainWindow(args); app.MainWindow = mainWindow; app.Run(mainWindow); if (dataProvider != null) { dataProvider.Dispose(); dataProvider = null; } AppLib.WriteLogInfoMessage("************ End KDS Client (WPF) *************"); } // Main()