private void executeToolStripMenuItem_Click(object sender, EventArgs e) { if (String.IsNullOrEmpty(_packageFilePath)) { Win32Util.ShowError(this, "Откройте сначала пакет, чтобы его выполнить"); return; } try { string workPath = GetRootPath(); string installerFullPath = Path.Combine(workPath, "Gin.Installer.exe"); Process process = new Process(); process.StartInfo.FileName = installerFullPath; process.StartInfo.Arguments = @"""" + _packageFilePath + @""""; process.StartInfo.CreateNoWindow = true; process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.UseShellExecute = false; process.StartInfo.ErrorDialog = true; process.Start(); } catch (Exception ex) { Win32Util.ShowError(this, "Не удалось запустить инсталлятор. Описание ошибки приведено далее. \r\n" + ex.Message + "\r\n" + ex.StackTrace); } }
private void MainForm_Load(object sender, EventArgs e) { _context.Log.AddLogInformation("Вход в MainForm.FormLoad()"); try { panelCancel.Visible = false; if (_package != null) { _context.Log.AddLogInformation("Есть пакет для запуска"); buttonBrowse.Enabled = false; panelCancel.Visible = true; Action action = new Action(_package.Execute); _context.Log.AddLogInformation("Запускаем пакет"); ExecutePackageAsyncState state = new ExecutePackageAsyncState() { action = action, package = _package }; action.BeginInvoke(execCallback, state); } else { _context.Log.AddLogInformation("Нет пакета для запуска"); buttonBrowse.Enabled = true; } } catch (Exception ex) { _context.Log.AddLogInformation("Поймано исключение в MainForm.FormLoad. Подробности смотрите далее."); _context.Log.AddLogException(ex); Win32Util.ShowError(this, "Ошибка при выполнении пакета. Подробности можно найти в журнале инсталлятора."); } _context.Log.AddLogInformation("Выход из MainForm.FormLoad()"); }
private void menuItemSavePackageAs_Click(object sender, EventArgs e) { try { SavePackageAs(); } catch (Exception ex) { Win32Util.ShowError(this, "Не удалось сохранить пакет. Описание ошибки приведено далее. \r\n" + ex.Message + "\r\n" + ex.StackTrace); } }
private void MainForm_Load(object sender, EventArgs e) { try { ExecuteAsyncWithWait(InitMetadata, null, "Загрузка метаданных"); listCommands.InitFromCommands(_metaData.Commands); } catch (Exception ex) { Win32Util.ShowError(this, "Не удалось запустить редактор пакетов. Описание ошибки приведено далее. \r\n" + ex.Message + "\r\n" + ex.StackTrace); } }
private void MenuItemExportClick(object sender, EventArgs e) { try { ChooseExportTypeForm form = new ChooseExportTypeForm(); if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) { SavePackage(_packageFilePath, form.GetResultContentType()); } } catch (Exception ex) { Win32Util.ShowError(this, "Не удалось экспортировать пакет. Описание ошибки приведено далее. \r\n" + ex.Message + "\r\n" + ex.StackTrace); } }
private void MenuItemOpenPackageClick(object sender, EventArgs e) { try { OpenFileDialog dialog = new OpenFileDialog(); DialogResult result = dialog.ShowDialog(); if (result == DialogResult.OK) { _packageFilePath = dialog.FileName; ExecuteAsyncWithWait(() => LoadPackage(_packageFilePath), null, "Загрузка пакета"); } } catch (Exception ex) { Win32Util.ShowError(this, "Не удалось открыть пакет. Описание ошибки приведено далее. \r\n" + ex.Message + "\r\n" + ex.StackTrace); } }
private void menuItemSavePackage_Click(object sender, EventArgs e) { try { if (_packageFilePath == null) { SavePackageAs(); } else { SavePackage(_packageFilePath, PackageContentType.Empty); } } catch (Exception ex) { Win32Util.ShowError(this, "Не удалось сохранить пакет. Описание ошибки приведено далее. \r\n" + ex.Message + "\r\n" + ex.StackTrace); } }
private void InitMetadataCompleted(IAsyncResult state) { _executionContext.Log.AddLogInformation("Вход в InitMetadataCompleted()"); try { Action initAction = (Action)state.AsyncState; initAction.EndInvoke(state); _executionContext.Log.AddLogInformation("Вызов InvokeLoadMainPackage()"); InvokeLoadMainPackage(); } catch (Exception ex) { _executionContext.Log.AddLogInformation("Поймано исключение в InitMetadataCompleted. Подробности смотрите далее."); _executionContext.Log.AddLogException(ex); Win32Util.ShowError(this, "Не удалось загрузить метаданные. Дальнейшая работа инсталляционного пакета невозможна. Подробности случившегося сбоя смотрите в лог-файле"); CloseForm(); } _executionContext.Log.AddLogInformation("Выход из InitMetadataCompleted()"); }
private void LoadMainPackageCallback(IAsyncResult state) { _executionContext.Log.AddLogInformation("Вход в LoadMainPackageCallback()"); try { Action action = (Action)state.AsyncState; action.EndInvoke(state); } catch (Exception ex) { _executionContext.Log.AddLogInformation("Исключение при работе метода LoadMainPackageCallback(). Подробности смотрите далее."); _executionContext.Log.AddLogException(ex); Invoke(new Action(() => { ExecutedPackage = null; Win32Util.ShowError(this, "Ошибка при загрузке пакета"); }), null); } _executionContext.Log.AddLogInformation("Выход из LoadMainPackageCallback()"); }
private void LoadMainPackage() { _executionContext.Log.AddLogInformation("Вход в LoadMainPackage()"); if (_packageFileName == null) { string exePath = GetExePath(); string packagePath = Path.Combine(exePath, "package.gin"); _packageFileName = packagePath; _executionContext.Log.AddLogInformation("Главный пакет ожидаем в <" + _packageFileName + ">"); } if (File.Exists(_packageFileName)) { _executionContext.Log.AddLogInformation("Файл главного пакета найден."); LogMessage("Загружается пакет..."); ExecutedPackage = new Package(_executionContext); try { _executionContext.Log.AddLogInformation("Начинаем загрузку."); ExecutedPackage.Load(_packageFileName); _executionContext.Log.AddLogInformation("Загрузка окончена."); } catch (PackageExecutionCancelledException) { _executionContext.Log.AddLogInformation("Пользователь остановил загрузку."); ExecutedPackage = null; Win32Util.ShowError(this, "Загрузка пакета остановлена пользователем"); CloseForm(); } catch (Exception ex) { _executionContext.Log.AddLogInformation("Исключение при работе метода LoadMainPackage(). Подробности смотрите далее."); _executionContext.Log.AddLogException(ex); ExecutedPackage = null; Win32Util.ShowError(this, "Не удалось запустить инсталляционный пакет, однако вы можете попробовать запустить другой инсталляцонный пакет. При повторении ошибки обратитесь к разработчику. Подробности случившегося сбоя смотрите в лог-файле"); } } _executionContext.Log.AddLogInformation("Закрываем форму загрузки."); CloseForm(); _executionContext.Log.AddLogInformation("Выход из LoadMainPackage()"); }
private void LoadAndExecute(string packagePath) { _context.Log.AddLogInformation("Вход в LoadAndExecute('" + packagePath + "')"); try { buttonBrowse.Enabled = false; panelCancel.Visible = true; _package = new Package(_context); panelCancel.Visible = true; buttonBrowse.Enabled = false; _context.Log.AddLogInformation("Начинаем загрузку пакета <" + packagePath + ">"); Func <string, string> load = new Func <string, string>(_package.Load); load.BeginInvoke(packagePath, loadCallback, load); } catch (Exception ex) { _context.Log.AddLogInformation("Поймано исключение в LoadAndExecute. Подробности смотрите далее."); _context.Log.AddLogException(ex); Win32Util.ShowError(this, "Ошибка при выполнении пакета. Подробности можно найти в журнале инсталлятора."); } _context.Log.AddLogInformation("Выход из LoadAndExecute()"); }
private void menuItemNewPackage_Click(object sender, EventArgs e) { try { PackageBody body = new PackageBody(); body.Command = new CommandSequence(); if (_tree != null) { ((IDisposable)_tree).Dispose(); } _tree = new TreeViewCommandTree(treeCommands); _tree.LoadTree(body); _tree.ExpandAll(); _tree.SelectCommandTreeNode += new SelectCommandTreeNodeDelegate(TreeSelectCommandTreeNode); _packageFilePath = null; SetFilePathStatus(_packageFilePath); } catch (Exception ex) { Win32Util.ShowError(this, "Не удалось создать новый пакет. Описание ошибки приведено далее. \r\n" + ex.Message + "\r\n" + ex.StackTrace); } }
private void ExecuteAsyncWithWait(Action method, AutoResetEvent cancelEvent, string message) { StartScreenForm form = new StartScreenForm(cancelEvent, message); method.BeginInvoke(ar => { try { Win32Util.ExecuteOrInvoke(form, form.Close); method.EndInvoke(ar); } catch (Exception ex) { Win32Util.ShowError(this, "Не удалось выполнить операцию. Описание ошибки приведено далее. \r\n" + ex.Message + "\r\n" + ex.StackTrace); } }, null); if (form.ShowDialog() == DialogResult.Cancel && cancelEvent != null) { cancelEvent.Set(); } }
void execCallback(IAsyncResult result) { _context.Log.AddLogInformation("Вход в execCallback"); try { ExecutePackageAsyncState state = (ExecutePackageAsyncState)result.AsyncState; state.action.EndInvoke(result); Win32Util.ExecuteOrInvoke(this, () => { buttonBrowse.Enabled = true; panelCancel.Visible = false; MessageBox.Show(this, "Пакет выполнен успешно", "Выполнение пакета завершено", MessageBoxButtons.OK, MessageBoxIcon.Information); panelMain.Controls.Clear(); }); } catch (Exception ex) { _context.Log.AddLogInformation("Поймано исключение в execCallback. Подробности смотрите далее."); _context.Log.AddLogException(ex); Win32Util.ShowError(this, "Ошибка при выполнении пакета. Подробности можно найти в журнале инсталлятора."); } _context.Log.AddLogInformation("Выход из execCallback"); }
void loadCallback(IAsyncResult result) { _context.Log.AddLogInformation("Вход в loadCallback"); try { Func <string, string> load = (Func <string, string>)result.AsyncState; load.EndInvoke(result); _context.Log.AddLogInformation("Пакет загружен."); Action exec = new Action(_package.Execute); ExecutePackageAsyncState state = new ExecutePackageAsyncState() { action = exec, package = _package }; _context.Log.AddLogInformation("Начинаем выполнение пакета"); exec.BeginInvoke(execCallback, state); } catch (PackageExecutionCancelledException) { Win32Util.ExecuteOrInvoke(this, () => { buttonBrowse.Enabled = true; panelCancel.Visible = false; MessageBox.Show(this, "Прервано пользователем", "Ошибка при выполнении пакета", MessageBoxButtons.OK, MessageBoxIcon.Error); panelMain.Controls.Clear(); }); } catch (Exception ex) { _context.Log.AddLogInformation("Поймано исключение в loadCallback. Подробности смотрите далее."); _context.Log.AddLogException(ex); Win32Util.ShowError(this, "Ошибка при выполнении пакета. Подробности можно найти в журнале инсталлятора."); } _context.Log.AddLogInformation("Выход из loadCallback"); }