/ / презаписване на текущия exe от процес - c #, конзола

презаписване на текущия exe от процес - c #, конзола

Не съм сигурен дали това е добра практика, но нося с мен.

Имам 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

Извърших това, като имам бутон "Рестартирай за актуализиране" в главното приложение, което изпълнява следните стъпки:

  1. Стартирайте updater с ключ, съдържащ PID на главния процес.
  2. Основният процес започва да се изключва.
  3. Актуализаторът намира процеса с дадения PID и чака да излезе от него.
  4. Актуализаторът презаписва основното приложение с новата версия.
  5. Актуализаторът стартира основното приложение.
  6. Адаптерът се изключва.