Страницы

Поиск по вопросам

четверг, 15 ноября 2018 г.

Замена exe файла при работающем приложении (Автообновление)

Доброго времени суток.
Есть работающее приложение 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 . И почему то закрывается само по себе.


Ответ

Например, вы можете написать маленькое приложение, которое скопирует myapp.update в myapp, и запустить его перед выходом из основного приложения. Вспомогательное приложение пускай дождётся, пока основное завершит работу, и потом уже переносит.

Комментариев нет:

Отправить комментарий