protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); var log = new WarningHandler(); var savior = new FileSavior(); Singleton.Add(savior); Singleton.Add(log); if (e.Args.Length == 1) { if (e.Args[0] == KillLazuriteProcessCommand) { Utils.KillAllLazuriteProcesses(); App.Current.Shutdown(); } else if (e.Args[0] == RemoveFromAutorunCommand) { TaskSchedulerUtils.RemoveLogonTask(); App.Current.Shutdown(); } else { new MainWindow(e.Args[0]).Show(); } } else { Lazurite.Windows.Utils.Utils.ExecuteProcess(Lazurite.Windows.Utils.Utils.GetAssemblyPath(typeof(App).Assembly), WindowsIdentity.GetCurrent().Name, true, false); App.Current.Shutdown(); } }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); Singleton.Add(new WarningHandler()); Singleton.Add(new DataEncryptor()); Singleton.Add(new FileDataManager()); Singleton.Add(new ScenariosRepository()); // Stub for pluginsManager Singleton.Add(new UsersRepository()); // Stub for pluginsManager if (e.Args.Length == 1) { if (e.Args[0] == KillLazuriteProcessCommand) { Utils.KillAllLazuriteProcesses(); App.Current.Shutdown(); } else if (e.Args[0] == RemoveFromAutorunCommand) { TaskSchedulerUtils.RemoveLogonTask(); App.Current.Shutdown(); } else { new MainWindow(e.Args[0]).Show(); } } else { Lazurite.Windows.Utils.Utils.ExecuteProcess( Lazurite.Windows.Utils.Utils.GetAssemblyPath(typeof(App).Assembly), WindowsIdentity.GetCurrent().Name, true, false); App.Current.Shutdown(); } }
public MainWindow(string desktopUser) { InitializeComponent(); Icon = BitmapFrame.Create(Icons.Utils.GetIconData(Icons.Icon.Lazurite64)); var log = Singleton.Resolve <WarningHandlerBase>(); var fileSavior = Singleton.Resolve <FileSavior>(); var assemblyFolder = Lazurite.Windows.Utils.Utils.GetAssemblyFolder(typeof(App).Assembly); captionView.StartAnimateProgress(); var message = string.Empty; var error = false; Utils.VcRedistInstallAll(); Utils.FirewallSettings(); if (!fileSavior.Has(LazuriteServer.SettingsKey)) { //certificate installing try { var settingsStub = new ServerSettings(); settingsStub.CertificateHash = Lazurite.Windows.Server.Utils.AddCertificate(Path.Combine(assemblyFolder, CertificateFilename), "28021992"); fileSavior.Set(LazuriteServer.SettingsKey, settingsStub); Lazurite.Windows.Server.Utils.NetshAddSslCert(settingsStub.CertificateHash, settingsStub.Port); Lazurite.Windows.Server.Utils.NetshAddUrlacl(settingsStub.GetAddress()); Lazurite.Windows.Server.Utils.NetshAllowPort(settingsStub.Port); message += "*Стандартный сертификат для HTTPS установлен.\r\n"; } catch (Exception e) { var msg = "*!Ошибка при установке стандартного сертификата для HTTPS. Сервер не будет запущен.\r\n"; message += msg; log.ErrorFormat(e, msg); error = true; } } //plugins installing Singleton.Add(new ScenariosRepository()); //stub for pluginsManager Singleton.Add(new UsersRepository()); //stub for pluginsManager var pluginsFolderPath = Path.Combine(Lazurite.Windows.Utils.Utils.GetAssemblyFolder(typeof(App).Assembly), "PluginsToInstall"); var pluginsFiles = Directory.GetFiles(pluginsFolderPath).Where(x => x.EndsWith(PluginsManager.PluginFileExtension)).ToArray(); try { var pluginsManager = new PluginsManager(false); foreach (var pluginPath in pluginsFiles) { try { pluginsManager.HardReplacePlugin(pluginPath); } catch (Exception e) { var msg = "*!Ошибка при установке плагина\r\n[" + pluginPath + "].\r\n"; message += msg; log.ErrorFormat(e, msg); error = true; } } message += "*Плагины установлены.\r\n"; } catch (Exception e) { var msg = "*!Ошибка при установке плагинов. Часть функционала может быть недоступна.\r\n"; message += msg; log.ErrorFormat(e, msg); error = true; } //autorun installing try { var mainAppName = Path.Combine(Lazurite.Windows.Utils.Utils.GetAssemblyFolder(typeof(App).Assembly), LauncherExeName); TaskSchedulerUtils.CreateLogonTask(desktopUser, mainAppName); message += string.Format("*Программа добавлена в планировщик задач для пользователя [{0}].\r\n", desktopUser); } catch (Exception e) { var msg = string.Format("*!Невозможно добавить программу в автозапуск под пользователем [{0}].\r\nПрограмма не будет запускаться автоматически при логине пользователя [{0}].", desktopUser); message += msg; log.ErrorFormat(e, msg); error = true; } log.Info(message); Complete(message, error); }
private void PrepareLazurite(string desktopUser) { var log = Singleton.Resolve <WarningHandlerBase>(); var error = false; void appendTb(string text) { Dispatcher.BeginInvoke(new Action(() => { tbInfo.Text += "\r\n" + text; })); } void appendError(string msg, Exception e = null) { appendTb(msg); log.Error(msg, e); error = true; } void appendInfo(string msg) { appendTb(msg); log.Info(msg); } try { Dispatcher.BeginInvoke(new Action(() => captionView.StartAnimateProgress())); // Prepare environment var fileDataManager = Singleton.Resolve <FileDataManager>(); var assemblyFolder = Lazurite.Windows.Utils.Utils.GetAssemblyFolder(typeof(App).Assembly); // Create data backup var dataFolder = Path.Combine(assemblyFolder, "data"); var pluginsFolder = Path.Combine(assemblyFolder, "plugins"); var backupFolder = Path.Combine(assemblyFolder, "backup"); try { if (Directory.Exists(backupFolder)) { // Clear old backups var files = new DirectoryInfo(backupFolder).EnumerateFiles().ToArray(); if (files.Length >= 8) { var oldFiles = files .OrderBy(x => x.Name) .OrderBy(x => x.LastWriteTime) .Take(files.Length - 6); foreach (var oldFile in oldFiles) { File.Delete(oldFile.FullName); } } } else { Directory.CreateDirectory(backupFolder); } var dateTimeNowSafeString = DateTime.Now.ToString("dd.MM.yyyy_hh.mm.ss"); var zip = new FastZip(); zip.CreateZip(Path.Combine(backupFolder, dateTimeNowSafeString + "_data_backup.zip"), dataFolder, true, string.Empty); zip.CreateZip(Path.Combine(backupFolder, dateTimeNowSafeString + "_plugins_backup.zip"), pluginsFolder, true, string.Empty); } catch (Exception e) { appendError("!Ошибка при создании/удалении файлов бэкапов.", e); } if (!Utils.VcRedistInstallAll()) { appendError("!Ошибка установки пакетов VcRedist."); } else { appendInfo("Пакеты VcRedist установлены."); } try { if (!fileDataManager.Has(LazuriteServer.SettingsKey)) { // Certificate installing var settingsStub = new ServerSettings(); settingsStub.CertificateHash = SecurityHelper.AddCertificateInWindows(Path.Combine(assemblyFolder, CertificateFilename), "28021992", (msg) => log.Info(msg)); fileDataManager.Set(LazuriteServer.SettingsKey, settingsStub); appendInfo("Настройки сервера созданы."); } } catch (Exception e) { appendError("!Ошибка при создании настроек сервера.", e); } // Plugins installing var pluginsFolderPath = Path.Combine(Lazurite.Windows.Utils.Utils.GetAssemblyFolder(typeof(App).Assembly), "PluginsToInstall"); var pluginsFiles = Directory.GetFiles(pluginsFolderPath).Where(x => x.EndsWith(PluginsManager.PluginFileExtension)).ToArray(); try { var pluginsManager = new PluginsManager(false); foreach (var pluginPath in pluginsFiles) { try { pluginsManager.HardReplacePlugin(pluginPath); } catch (Exception e) { appendError($"!Ошибка при установке плагина\r\n[{pluginPath}].", e); } } appendInfo("Плагины установлены."); } catch (Exception e) { appendError("!Ошибка при установке плагинов. Часть функционала может быть недоступна.", e); } // Autorun installing try { var mainAppName = Path.Combine(Lazurite.Windows.Utils.Utils.GetAssemblyFolder(typeof(App).Assembly), LauncherExeName); TaskSchedulerUtils.CreateLogonTask(desktopUser, mainAppName); appendInfo($"Программа добавлена в планировщик задач для пользователя [{desktopUser}]."); // When task has been added or changed, it immediately starts the launcher appendInfo($"Запуск Lazurite..."); Thread.Sleep(1500); // Extra crutch; } catch (Exception e) { appendError($"!Невозможно добавить программу в автозапуск для пользователем [{desktopUser}].\r\n" + $"Программа не будет запускаться автоматически при логине пользователя [{desktopUser}].", e); } Dispatcher.BeginInvoke(new Action(() => btOk.IsEnabled = true)); Dispatcher.BeginInvoke(new Action(() => captionView.StopAnimateProgress())); if (!error) { Dispatcher.BeginInvoke(new Action(() => App.Current.Shutdown())); } } catch (Exception e) { appendError("Непредвиденная ошибка! " + e.Message, e); } }