Не съм сигурен дали това е добра практика, но нося с мен.
Имам url с нова версия на приложението си, не искам да използвам никакви инструменти за актуализиране, за да го направя.
Имам 2 приложения. 1 приложение изтегля последната версия на приложението, нарича го "Updater" приложение за конзоли. Другото приложение е "MainApp". Искам да се обадя на приложението Updater от MainApp, за да замени MainApp с изтегленото приложение.
MessageBox.Show("We need to update the application. This might take a short while");
System.Diagnostics.Process updateProcess = new System.Diagnostics.Process();
updateProcess.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory + "Updater.exe";
updateProcess.StartInfo.Arguments = AppDomain.CurrentDomain.BaseDirectory;
updateProcess.Start();
Process.GetCurrentProcess().Kill();
//Application.Exit();
Приложението Updater извлича новата версия на файла от аргументите, предавани на работната решетка на MainApp, и го запазва, както е показано по-долу
client.BaseUrl = base_url + "MainApp.exe";
var request = new RestRequest(Method.GET);
byte[] responseData = client.DownloadData(request);
System.IO.File.WriteAllBytes(args[0] + "MainApp.exe", responseData);
Това не изглежда доста работа. Той не презаписва приложението!
Някакви предположения?
Отговори:
0 за отговор № 1Извърших това, като имам бутон "Рестартирай за актуализиране" в главното приложение, което изпълнява следните стъпки:
- Стартирайте updater с ключ, съдържащ PID на главния процес.
- Основният процес започва да се изключва.
- Актуализаторът намира процеса с дадения PID и чака да излезе от него.
- Актуализаторът презаписва основното приложение с новата версия.
- Актуализаторът стартира основното приложение.
- Адаптерът се изключва.