/ / overwrite aktuálny exe z procesu - c #, konzola

prepísať aktuálny exe z procesu - c #, konzola

Nie som si istý, či je to dobrá prax, ale že so mnou znášať.

Mám url s novou verziou mojej aplikácie, nechcem používať akékoľvek nástroje updater na to.

Mám 2 aplikácie. 1 aplikácia stiahne najnovšiu verziu aplikácie, zavolajte ju aplikáciu "Updater". Druhá aplikácia je "MainApp". Chcem zavolať aplikáciu Updater z aplikácie MainApp a nahradiť MainApp stiahnutou aplikáciou.

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

Aplikácia Updater načíta novú verziu súboru z argu prechádzajúcu do pracovného riadka programu MainApp a uloží ho, kód nižšie

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

Zdá sa, že to celkom nefunguje. Nepoužíva to prepísanie aplikácie!

Nejaké návrhy?

odpovede:

0 pre odpoveď č. 1

Dosiahol som to pomocou tlačidla "Reštartovať na aktualizáciu" v hlavnej aplikácii, ktorá vykoná nasledujúce kroky:

  1. Spustite aktualizátor s prepínačom obsahujúcim PID hlavného procesu.
  2. Hlavný proces sa začína vypínať.
  3. Aktualizátor nájde proces s daným PID a čaká na jeho ukončenie.
  4. Aktualizátor prepíše hlavnú aplikáciu s novou verziou.
  5. Aktualizátor spustí hlavnú aplikáciu.
  6. Aktualizátor sa vypne.