/ / sovrascrive exe corrente dal processo - c #, console

sovrascrivi l'exe corrente da process - c #, console

Non sono sicuro che sia una buona pratica, ma abbi pazienza.

Ho un url con una nuova versione della mia app, non voglio usare nessuno strumento di aggiornamento per farlo.

Ho 2 app. 1 app download l'ultima versione dell'app, lo chiamano "Updater" una console app. L'altra applicazione è il "MainApp". Voglio chiamare l'app di aggiornamento da MainApp per sostituire MainApp con l'app scaricata.

  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();

L'app Updater recupera la nuova versione del file dagli arg passati alla directory di lavoro di MainApp e la salva, codice sotto

        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);

Questo non sembra funzionare abbastanza. Non sovrascrive l'app!

Eventuali suggerimenti?

risposte:

0 per risposta № 1

Ho raggiunto questo obiettivo avendo un pulsante "Riavvia per aggiornare" nell'applicazione principale, che esegue i seguenti passaggi:

  1. Avviare il programma di aggiornamento con un interruttore contenente il PID del processo principale.
  2. Il processo principale inizia a chiudere.
  3. Il programma di aggiornamento trova il processo con il PID specificato e attende la sua uscita.
  4. Il programma di aggiornamento sovrascrive l'applicazione principale con la nuova versione.
  5. Il programma di aggiornamento avvia l'applicazione principale.
  6. Il programma di aggiornamento si spegne.