#c_sharp
Доброго времени суток. Есть работающее приложение myapp.exe которое качает с сервера новую версию и кладет рядом с myapp.exe под именем. myapp.update . Каким способом можно подменить myapp.exe на новый myapp.exe? Попытался сделать дополнительный проект. В конце главный проект выполняет Updater.MainWindow update = new Updater.MainWindow(); update.Show(); System.Diagnostics.Process.GetCurrentProcess().Kill(); Но окно главного проекта остается открытым но во фризе. Проект в котором прописан Update не появляться вплоть до последнего действия и тут же закрывается public MainWindow() { InitializeComponent(); Thread.Sleep(5000); UpdateNow(); } public void UpdateNow() { bool oldapp = false; bool newapp = false; Changes.Content = "Идет проверка целостности файлов..."; string path = System.IO.Directory.GetCurrentDirectory(); string[] allFoundFiles = Directory.GetFiles(path, "myapp.exe"); foreach (string file in allFoundFiles) { oldapp = true; } string[] allFoundFiles1 = Directory.GetFiles(path, "myapp.update"); foreach (string file in allFoundFiles) { newapp = true; } if (oldapp == true && newapp == true) { Changes.Content = "Все файлы на месте. Идет применение настроек..."; Thread.Sleep(5000); try { FileInfo fi1 = new FileInfo(path + @"\myapp.exe"); fi1.Delete(); } catch (Exception ex) { Changes.Content = ex.ToString(); } try { System.IO.File.Move(path + @"\myapp.update", path + @"\myapp.exe"); Changes.Content = "Все готово к работе :)"; System.Diagnostics.Process.Start(path + @"/myapp.exe"); } catch (Exception ex) { Changes.Content = ex.ToString(); } } else { Changes.Content = "Что - то не так"; } } } Мало того что Update не дает признаков жизни. Появляется ошибка "Отказано в доступе " при удалении старого myapp.exe . И почему то закрывается само по себе.
Ответы
Ответ 1
Например, вы можете написать маленькое приложение, которое скопирует myapp.update в myapp, и запустить его перед выходом из основного приложения. Вспомогательное приложение пускай дождётся, пока основное завершит работу, и потом уже переносит.Ответ 2
На самом деле, можно запустить другой процесс, который после завершения этого заменит файл, но более логичный вариант - сделать, чтобы ваша программа запускалась через "лаунчер", который будет брать и запускать самую новую версию программы, которую найдёт в папке.
Комментариев нет:
Отправить комментарий