예제 #1
0
        private void UpdateAsync()
        {
            AppArgument updatePath = new AppArgument()
            {
                Name = "--path", Value = "."
            };
            AppArgument     reset         = argList.Find(x => x.Name == "--reset");
            AppArgument     checkInstance = argList.Find(x => x.Name == "--processname");
            UpdaterSettings config        = CreateConfig();

            try
            {
                SetUpdateStatusAsync("Инициализация...");
                updater = new ConfigLoader(updatePath.Value, config);
                updater.ReadLocal();
                bool needExit = false;
                if (checkInstance != null)
                {
                    Process[] processes = Process.GetProcessesByName(checkInstance.Value);
                    if (processes.Length > 0)
                    {
                        HandleUpdateMessage("Это приложение уже запущено", checkInstance.Value, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        needExit = true;
                    }
                }
                if (!needExit)
                {
                    if (reset != null)
                    {
                        SetUpdateStatusAsync("Выполняется сброс информации об обновлениях...");
                        updater.ResetLocalConfig();
                        SetUpdateStatusAsync("Информация об обновлениях сброшена, завершение работы.");
                    }
                    else
                    {
                        SetUpdateStatusAsync("Загружаю файл с информацией об обновлениях...");
                        if (updater.GetLocal() == null)
                        {
                            updater.ResetLocalConfig();
                        }
                        Config localConfig  = updater.GetLocal();
                        Config remoteConfig = updater.GetRemote();

                        if (localConfig.Version < remoteConfig.Version)
                        {
                            SetUpdateStatusAsync("Обновление найдено, выполняется загрузка...");
                            string localUpdate = updater.DownloadUpdate(remoteConfig);
                            SetUpdateStatusAsync("Выполняется установка обновления...");
                            frm.DisableFormClosing = true;
                            if (ApplyUpdate(localUpdate, remoteConfig.Version))
                            {
                                SetUpdateStatusAsync("Обновление успешно установлено!");
                            }
                            else
                            {
                                SetUpdateStatusAsync("Не удалось установить обновление!");
                            }
                            frm.DisableFormClosing = false;
#if DEBUG
                            Thread.Sleep(3000);
#endif
                        }
                        else
                        {
                            SetUpdateStatusAsync("Oбновление не требуется!");
                        }
                        DoPostUpdateAction(updatePath.Value);
                    }
                }
            }
            catch (Exception ex)
            {
                frm.DisableFormClosing = false;
                HandleUpdateExceptionAsync(ex);
                DoPostUpdateAction(updatePath.Value);
                return;
            }
            finally
            {
                frm.BeginInvoke(new WorkerFinish(UpdateCompleted));
            }
        }
예제 #2
0
        private void UpdateAsync()
        {
            AppArgument updatePath = new AppArgument() { Name = "--path", Value = "." };
            AppArgument reset = argList.Find(x => x.Name == "--reset");
            AppArgument checkInstance = argList.Find(x => x.Name == "--processname");
            UpdaterSettings config = CreateConfig();
            try
            {
                SetUpdateStatusAsync("Инициализация...");
                updater = new ConfigLoader(updatePath.Value, config);
                updater.ReadLocal();
                bool needExit = false;
                if (checkInstance != null)
                {
                    Process[] processes = Process.GetProcessesByName(checkInstance.Value);
                    if (processes.Length > 0)
                    {
                        HandleUpdateMessage("Это приложение уже запущено", checkInstance.Value, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        needExit = true;
                    }
                }
                if (!needExit)
                {
                    if (reset != null)
                    {
                        SetUpdateStatusAsync("Выполняется сброс информации об обновлениях...");
                        updater.ResetLocalConfig();
                        SetUpdateStatusAsync("Информация об обновлениях сброшена, завершение работы.");
                    }
                    else
                    {
                        SetUpdateStatusAsync("Загружаю файл с информацией об обновлениях...");
                        if (updater.GetLocal() == null) updater.ResetLocalConfig();
                        Config localConfig = updater.GetLocal();
                        Config remoteConfig = updater.GetRemote();

                        if (localConfig.Version < remoteConfig.Version)
                        {
                            SetUpdateStatusAsync("Обновление найдено, выполняется загрузка...");
                            string localUpdate = updater.DownloadUpdate(remoteConfig);
                            SetUpdateStatusAsync("Выполняется установка обновления...");
                            frm.DisableFormClosing = true;
                            if (ApplyUpdate(localUpdate, remoteConfig.Version))
                            {
                                SetUpdateStatusAsync("Обновление успешно установлено!");
                            }
                            else
                            {
                                SetUpdateStatusAsync("Не удалось установить обновление!");
                            }
                            frm.DisableFormClosing = false;
#if DEBUG
                            Thread.Sleep(3000);
#endif
                        }
                        else
                        {
                            SetUpdateStatusAsync("Oбновление не требуется!");
                        }
                        DoPostUpdateAction(updatePath.Value);
                    }
                }
            }
            catch (Exception ex)
            {
                frm.DisableFormClosing = false;
                HandleUpdateExceptionAsync(ex);
                DoPostUpdateAction(updatePath.Value);
                return;
            }
            finally
            {
                frm.BeginInvoke(new WorkerFinish(UpdateCompleted));
            }
        }